Commit ea3c15ff authored by GuanHua's avatar GuanHua
parents f8758331 da553ac1
......@@ -14,28 +14,49 @@ export default [
name: 'quoteOrder',
component: '@/pages/transaction/confirmInquiryQuote/quoteOrder'
},
// 报价单查询详情
{
path: '/memberCenter/tranactionAbility/confirmInquiryQuote/quoteOrder/details',
name: 'quoteOrderDetails',
hideInMenu: true,
component: '@/pages/transaction/confirmInquiryQuote/components/details'
},
// 待提交审核报价单
{
path: '/memberCenter/tranactionAbility/confirmInquiryQuote/pendingSubmitReview',
name: 'pendingSubmitReview',
component: '@/pages/transaction/confirmInquiryQuote/pendingSubmitReview'
},
// 待提交审核报价单详情
{
path: '/memberCenter/tranactionAbility/confirmInquiryQuote/pendingSubmitReview/details',
name: 'pendingSubmitReviewDetails',
hideInMenu: true,
component: '@/pages/transaction/confirmInquiryQuote/components/details'
},
// 待审核询价单(一级)
{
path: '/memberCenter/tranactionAbility/confirmInquiryQuote/pendingReviewOne',
name: 'pendingReviewOne',
component: '@/pages/transaction/confirmInquiryQuote/pendingReviewOne'
},
// 待审核询价单(一级)详情
{
path: '/memberCenter/tranactionAbility/confirmInquiryQuote/pendingReviewOne/details',
name: 'pendingReviewOneDetails',
hideInMenu: true,
component: '@/pages/transaction/confirmInquiryQuote/components/details'
},
// 待审核询价单(二级)
{
path: '/memberCenter/tranactionAbility/confirmInquiryQuote/pendingReviewTwo',
name: 'pendingReviewTwo',
component: '@/pages/transaction/confirmInquiryQuote/pendingReviewTwo'
},
// 详情
// 待审核询价单(二级)详情
{
path: '/memberCenter/tranactionAbility/confirmInquiryQuote/components/details',
name: 'details',
path: '/memberCenter/tranactionAbility/confirmInquiryQuote/pendingReviewTwo/details',
name: 'pendingReviewTwoDetails',
hideInMenu: true,
component: '@/pages/transaction/confirmInquiryQuote/components/details'
},
......@@ -45,6 +66,13 @@ export default [
name: 'pendingSubmit',
component: '@/pages/transaction/confirmInquiryQuote/pendingSubmit'
},
// 待提交报价单详情
{
path: '/memberCenter/tranactionAbility/confirmInquiryQuote/pendingSubmit/details',
name: 'pendingSubmitDetails',
hideInMenu: true,
component: '@/pages/transaction/confirmInquiryQuote/components/details'
},
]
},
]
\ No newline at end of file
......@@ -17,7 +17,7 @@ export default [
// 询价单查询详情
{
path: '/memberCenter/tranactionAbility/goodsOffer/enquiryOrder/details',
name: 'details',
name: 'quoteOrderDetails',
hideInMenu: true,
component: '@/pages/transaction/goodsOffer/components/details'
},
......@@ -37,14 +37,14 @@ export default [
// 编辑报价单
{
path: '/memberCenter/tranactionAbility/goodsOffer/addEnquiryOrder/edit',
name: 'add',
name: 'edit',
hideInMenu: true,
component: '@/pages/transaction/goodsOffer/addEnquiryOrder/add'
},
// 待新增询价单详情
{
path: '/memberCenter/tranactionAbility/goodsOffer/addEnquiryOrder/details',
name: 'details',
name: 'addEnquiryOrderDetails',
hideInMenu: true,
component: '@/pages/transaction/goodsOffer/components/details'
},
......@@ -57,7 +57,7 @@ export default [
// 待审核询价单(一级)详情
{
path: '/memberCenter/tranactionAbility/goodsOffer/pendingReviewOne/details',
name: 'details',
name: 'pendingReviewOneDetails',
hideInMenu: true,
component: '@/pages/transaction/goodsOffer/components/details'
},
......@@ -70,7 +70,7 @@ export default [
// 待审核询价单(二级)详情
{
path: '/memberCenter/tranactionAbility/goodsOffer/pendingReviewTwo/details',
name: 'details',
name: 'pendingReviewTwoDetails',
hideInMenu: true,
component: '@/pages/transaction/goodsOffer/components/details'
},
......@@ -83,7 +83,7 @@ export default [
// 待提交询价单详情
{
path: '/memberCenter/tranactionAbility/goodsOffer/pendingSubmit/details',
name: 'details',
name: 'pendingSubmitDetails',
hideInMenu: true,
component: '@/pages/transaction/goodsOffer/components/details'
}
......
......@@ -450,6 +450,27 @@ const TranactionRoute: RouterChild = {
name: 'analysis',
component: '@/pages/transaction/supplierEvaluation/analysis',
},
// 收到的评价-详情
{
path: '/memberCenter/tranactionAbility/supplierEvaluation/received/detail',
name: 'receivedDetail',
component: '@/pages/transaction/supplierEvaluation/received/detail/index',
hideInMenu: true,
},
// 发出的评价-详情
{
path: '/memberCenter/tranactionAbility/supplierEvaluation/sent/detail',
name: 'sentDetail',
component: '@/pages/transaction/supplierEvaluation/sent/detail/index',
hideInMenu: true,
},
// 发出的评价-编辑
{
path: '/memberCenter/tranactionAbility/supplierEvaluation/sent/edit',
name: 'editSent',
component: '@/pages/transaction/supplierEvaluation/sent/detail/index',
hideInMenu: true,
},
// 收到的评价(UI合并到评价统计了,暂时不需要)
// {
// path: '/memberCenter/tranactionAbility/supplierEvaluation/received',
......@@ -489,6 +510,27 @@ const TranactionRoute: RouterChild = {
name: 'analysis',
component: '@/pages/transaction/purchaserEvaluation/analysis',
},
// 收到的评价-详情
{
path: '/memberCenter/tranactionAbility/purchaserEvaluation/received/detail',
name: 'receivedDetail',
component: '@/pages/transaction/purchaserEvaluation/received/detail/index',
hideInMenu: true,
},
// 发出的评价-详情
{
path: '/memberCenter/tranactionAbility/purchaserEvaluation/sent/detail',
name: 'sentDetail',
component: '@/pages/transaction/purchaserEvaluation/sent/detail/index',
hideInMenu: true,
},
// 发出的评价-编辑
{
path: '/memberCenter/tranactionAbility/purchaserEvaluation/sent/edit',
name: 'editSent',
component: '@/pages/transaction/purchaserEvaluation/sent/detail/index',
hideInMenu: true,
},
// 收到的评价(UI合并到评价统计了,暂时不需要)
// {
// path: '/memberCenter/tranactionAbility/purchaserEvaluation/received',
......
......@@ -17,7 +17,7 @@ export default [
// 询价单查询详情
{
path: '/memberCenter/tranactionAbility/inquiryQuote/enquiryOrder/details',
name: 'details',
name: 'enquiryOrder',
hideInMenu: true,
component: '@/pages/transaction/inquiryQuote/components/details'
},
......@@ -30,7 +30,7 @@ export default [
// 报价单查询详情
{
path: '/memberCenter/tranactionAbility/inquiryQuote/quoteOrder/details',
name: 'details',
name: 'quoteOrderDetails',
hideInMenu: true,
component: '@/pages/transaction/inquiryQuote/components/details'
},
......@@ -50,7 +50,7 @@ export default [
// 新建报价单编辑
{
path: '/memberCenter/tranactionAbility/inquiryQuote/addInquiryOrder/edit',
name: 'add',
name: 'edit',
hideInMenu: true,
component: '@/pages/transaction/inquiryQuote/addInquiryOrder/add'
},
......@@ -70,7 +70,7 @@ export default [
// 待审核报价单(一级)详情
{
path: '/memberCenter/tranactionAbility/inquiryQuote/pendingReviewOne/details',
name: 'details',
name: 'pendingReviewOneDetails',
hideInMenu: true,
component: '@/pages/transaction/inquiryQuote/components/details'
},
......@@ -83,7 +83,7 @@ export default [
// 待审核报价单(二级)详情
{
path: '/memberCenter/tranactionAbility/inquiryQuote/pendingReviewTwo/details',
name: 'details',
name: 'pendingReviewTwoDetails',
hideInMenu: true,
component: '@/pages/transaction/inquiryQuote/components/details'
},
......@@ -96,7 +96,7 @@ export default [
// 待提交报价单详情
{
path: '/memberCenter/tranactionAbility/inquiryQuote/pendingSubmit/details',
name: 'details',
name: 'pendingSubmitDetails',
hideInMenu: true,
component: '@/pages/transaction/inquiryQuote/components/details'
},
......
......@@ -2,7 +2,7 @@
* @Author: LeeJiancong
* @Date: 2020-07-13 14:08:50
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-20 19:48:59
* @LastEditTime: 2020-10-21 14:13:00
*/
export default {
......@@ -139,34 +139,49 @@ export default {
// 确认询价报价
'menu.tranactionAbility.confirmInquiryQuote': '确认询价报价',
'menu.tranactionAbility.confirmInquiryQuote.quoteOrder': '报价单查询',
'menu.tranactionAbility.confirmInquiryQuote.details': '新建报价单',
'menu.tranactionAbility.confirmInquiryQuote.quoteOrderDetails': '报价单查询详情',
'menu.tranactionAbility.confirmInquiryQuote.pendingSubmitReview': '待提交审核报价单',
'menu.tranactionAbility.confirmInquiryQuote.pendingSubmitReviewDetails': '待提交审核报价单详情',
'menu.tranactionAbility.confirmInquiryQuote.pendingReviewOne': '待审核报价单(一级)',
'menu.tranactionAbility.confirmInquiryQuote.pendingReviewOneDetails': '待审核报价单(一级)详情',
'menu.tranactionAbility.confirmInquiryQuote.pendingReviewTwo': '待审核报价单(二级)',
'menu.tranactionAbility.confirmInquiryQuote.pendingReviewTwoDetails': '待审核报价单(二级)详情',
'menu.tranactionAbility.confirmInquiryQuote.pendingSubmit': '待确认报价单',
'menu.tranactionAbility.confirmInquiryQuote.pendingSubmitDetails': '待确认报价单详情',
// 商品询价
'menu.tranactionAbility.goodsOffer': '商品询价',
'menu.tranactionAbility.goodsOffer.enquiryOrder': '询价单查询',
'menu.tranactionAbility.goodsOffer.enquiryOrderDetails': '询价单查询详情',
'menu.tranactionAbility.goodsOffer.addEnquiryOrder': '待新增询价单',
'menu.tranactionAbility.goodsOffer.add': '新建询价单',
'menu.tranactionAbility.goodsOffer.edit': '编辑询价单',
'menu.tranactionAbility.goodsOffer.detail': '查看询价单',
'menu.tranactionAbility.goodsOffer.details': '新建询价单',
'menu.tranactionAbility.goodsOffer.addEnquiryOrderDetails': '待新增询价详情',
'menu.tranactionAbility.goodsOffer.pendingReviewOne': '待审核询价单(一级)',
'menu.tranactionAbility.goodsOffer.pendingReviewOneDetails': '待审核询价单(一级)详情',
'menu.tranactionAbility.goodsOffer.pendingReviewTwo': '待审核询价单(二级)',
'menu.tranactionAbility.goodsOffer.pendingReviewTwoDetails': '待审核询价单(二级)详情',
'menu.tranactionAbility.goodsOffer.pendingSubmit': '待提交询价单',
'menu.tranactionAbility.goodsOffer.pendingSubmitDetails': '待提交询价单详情',
'menu.tranactionAbility.goodsOffer.quoteOrderDetails': '报价单查询详情',
// 询价报价
'menu.tranactionAbility.inquiryQuote': '询价报价',
'menu.tranactionAbility.inquiryQuote.enquiryOrder': '询价单查询',
'menu.tranactionAbility.inquiryQuote.enquiryOrderDetails': '询价单查询详情',
'menu.tranactionAbility.inquiryQuote.quoteOrder': '报价单查询',
'menu.tranactionAbility.inquiryQuote.quoteOrderDetails': '报价单查询详情',
'menu.tranactionAbility.inquiryQuote.addInquiryOrder': '待新增报价单',
'menu.tranactionAbility.inquiryQuote.add': '新建报价单',
'menu.tranactionAbility.inquiryQuote.edit': '编辑报价单',
'menu.tranactionAbility.inquiryQuote.details': '新建报价单',
'menu.tranactionAbility.inquiryQuote.addInquiryOrderDetails': '待新增报价单详情',
'menu.tranactionAbility.inquiryQuote.pendingReviewOne': '待审核报价单(一级)',
'menu.tranactionAbility.inquiryQuote.pendingReviewOneDetails': '待审核报价单(一级)详情',
'menu.tranactionAbility.inquiryQuote.pendingReviewTwo': '待审核报价单(二级)',
'menu.tranactionAbility.inquiryQuote.pendingReviewTwoDetails': '待审核报价单(二级)详情',
'menu.tranactionAbility.inquiryQuote.pendingSubmit': '待提交报价单',
'menu.tranactionAbility.inquiryQuote.pendingSubmitDetails': '待提交报价单详情',
//进销存
'menu.tranactionAbility.stockSellStorage': '进销存',
......@@ -282,6 +297,9 @@ export default {
'menu.tranactionAbility.supplierEvaluation.evaluate': '评价',
'menu.tranactionAbility.supplierEvaluation.analysis': '评价统计',
'menu.tranactionAbility.supplierEvaluation.received': '收到的评价',
'menu.tranactionAbility.supplierEvaluation.receivedDetail': '查看收到的评价',
'menu.tranactionAbility.supplierEvaluation.sentDetail': '查看发出的评价',
'menu.tranactionAbility.supplierEvaluation.editSent': '编辑发出的评价',
'menu.tranactionAbility.supplierEvaluation.sent': '发出的评价',
// 采购商评价
......@@ -290,6 +308,9 @@ export default {
'menu.tranactionAbility.purchaserEvaluation.evaluate': '评价',
'menu.tranactionAbility.purchaserEvaluation.analysis': '评价统计',
'menu.tranactionAbility.purchaserEvaluation.received': '收到的评价',
'menu.tranactionAbility.purchaserEvaluation.receivedDetail': '查看收到的评价',
'menu.tranactionAbility.purchaserEvaluation.sentDetail': '查看发出的评价',
'menu.tranactionAbility.purchaserEvaluation.editSent': '编辑发出的评价',
'menu.tranactionAbility.purchaserEvaluation.sent': '发出的评价',
// 物流能力
......
......@@ -3,10 +3,10 @@ import AuditProcess from '@/components/AuditProcess'
import { findLastIndexFlowState } from '../../_public/order/utils'
import OrderProductTable from '../../components/orderProductTable'
import SaleOrderProductTable from '../../components/saleOrderProductTable'
import OrderPayTabs from '../../components/OrderPayTabs'
import OrderMergeInfo from '../../components/OrderMergeInfo'
import OrderDeleveRecord from '../../components/OrderDeleveRecord'
import OrderTransformRecord from '../../components/OrderTransformRecord'
import OrderPayTabs from '../../components/orderPayTabs'
import OrderMergeInfo from '../../components/orderMergeInfo'
import OrderDeleveRecord from '../../components/orderDeleveRecord'
import OrderTransformRecord from '../../components/orderTransformRecord'
export interface OrderDetailSectionProps {
formContext: any,
......
......@@ -25,11 +25,12 @@ export interface parmas {
batchAction?: Function,
reloadRef?: any,
type?: number,
column?: any
}
const ReviewList: React.FC<parmas> = (props) => {
const ref = useRef<any>({});
const { fetchData, selectAll, batchAction, reloadRef, type } = props;
const { fetchData, selectAll, batchAction, reloadRef, type, column } = props;
const [selectRow, setSelectRow] = useState([])
const [selectedRowKeys, setSelectedRowKeys] = useState<Array<number>>([]);
const [id, setId] = useState<number>();
......@@ -50,20 +51,7 @@ const ReviewList: React.FC<parmas> = (props) => {
})
const columns: ColumnType<any>[] = [
{
title: '报价单号',
key: 'quotationNo',
dataIndex: 'quotationNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/components/details?id=${record.id}&page_type=${type}&view=2`}>{text}</EyePreview>
},
{
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/components/details?id=${record.id}&page_type=${type}&view=1`}>{text}</EyePreview>
},
...column,
{
title: '询价单摘要',
key: 'details',
......
......@@ -3,6 +3,8 @@ import { message } from 'antd';
import ReviewList from '../components/reviewList';
import { timeRange } from '@/utils/index';
import { PublicApi } from '@/services/api';
import { ColumnType } from 'antd/lib/table/interface';
import EyePreview from '@/components/EyePreview';
const PendingReviewOne: React.FC<{}> = () => {
const [selectRow, setSelectRow] = useState<Array<number>>([]);
......@@ -65,6 +67,21 @@ const PendingReviewOne: React.FC<{}> = () => {
message.error('请选择要操作的询价单!')
}
}
const column: ColumnType<any>[] = [{
title: '报价单号',
key: 'quotationNo',
dataIndex: 'quotationNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/pendingSubmit/details?id=${record.id}&page_type=1&view=2`}>{text}</EyePreview>
}, {
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/pendingSubmit/details?id=${record.id}&page_type=1&view=1`}>{text}</EyePreview>
}]
return (
<ReviewList
reloadRef={ref}
......@@ -72,6 +89,7 @@ const PendingReviewOne: React.FC<{}> = () => {
selectAll={selectAll}
batchAction={batchAction}
type={2}
column={column}
/>
)
}
......
......@@ -3,6 +3,8 @@ import { message } from 'antd';
import ReviewList from '../components/reviewList';
import { timeRange } from '@/utils/index';
import { PublicApi } from '@/services/api';
import { ColumnType } from 'antd/lib/table/interface';
import EyePreview from '@/components/EyePreview';
const PendingReviewTwo: React.FC<{}> = () => {
const [selectRow, setSelectRow] = useState<Array<number>>([]);
......@@ -65,6 +67,21 @@ const PendingReviewTwo: React.FC<{}> = () => {
message.error('请选择要操作的询价单!')
}
}
const column: ColumnType<any>[] = [{
title: '报价单号',
key: 'quotationNo',
dataIndex: 'quotationNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/pendingSubmit/details?id=${record.id}&page_type=1&view=2`}>{text}</EyePreview>
}, {
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/pendingSubmit/details?id=${record.id}&page_type=1&view=1`}>{text}</EyePreview>
}]
return (
<ReviewList
reloadRef={ref}
......@@ -72,6 +89,7 @@ const PendingReviewTwo: React.FC<{}> = () => {
selectAll={selectAll}
batchAction={batchAction}
type={3}
column={column}
/>
)
}
......
......@@ -30,13 +30,13 @@ const PendingSubmit: React.FC<{}> = () => {
key: 'quotationNo',
dataIndex: 'quotationNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/components/details?id=${record.id}&page_type=1&view=2`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/pendingSubmit/details?id=${record.id}&page_type=1&view=2`}>{text}</EyePreview>
}, {
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/components/details?id=${record.id}&page_type=1&view=1`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/pendingSubmit/details?id=${record.id}&page_type=1&view=1`}>{text}</EyePreview>
}, {
title: '询价单摘要',
key: 'details',
......
......@@ -29,13 +29,13 @@ const PendingSubmitReview: React.FC<{}> = () => {
key: 'quotationNo',
dataIndex: 'quotationNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/components/details?id=${record.id}&page_type=5&view=2`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/pendingSubmitReview/details?id=${record.id}&page_type=5&view=2`}>{text}</EyePreview>
},{
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/components/details?id=${record.id}&page_type=5&view=1`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/pendingSubmitReview/details?id=${record.id}&page_type=5&view=1`}>{text}</EyePreview>
}, {
title: '报价单摘要',
key: 'details',
......
......@@ -23,13 +23,13 @@ const EnquiryOrder: React.FC<{}> = (props) => {
key: 'quotationNo',
dataIndex: 'quotationNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/components/details?id=${record.id}&page_type=4&view=2`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/quoteOrder/details?id=${record.id}&page_type=4&view=2`}>{text}</EyePreview>
},{
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/components/details?id=${record.id}&page_type=4&view=1`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/confirmInquiryQuote/quoteOrder/details?id=${record.id}&page_type=4&view=1`}>{text}</EyePreview>
}, {
title: '报价单摘要',
key: 'details',
......
......@@ -28,7 +28,7 @@ const AddEnquiryOrder: React.FC<{}> = () => {
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/goodsOffer/components/details?id=${record.id}&page_type=6&view=1`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/goodsOffer/addEnquiryOrder/details?id=${record.id}&page_type=6&view=1`}>{text}</EyePreview>
},
{
title: '询价单摘要',
......@@ -89,7 +89,7 @@ const AddEnquiryOrder: React.FC<{}> = () => {
return (
<>
<Button type='link' disabled={record.interiorState !== 1}>提交审核</Button>
<Button type="link" disabled={record.interiorState !== 4 && record.externalState !== 1 }><Link to={`/memberCenter/tranactionAbility/goodsOffer/addEnquiryOrder/add?id=${record.id}`}>编辑</Link></Button>
<Button type="link" disabled={record.interiorState !== 4 && record.externalState !== 1 }><Link to={`/memberCenter/tranactionAbility/goodsOffer/addEnquiryOrder/edit?id=${record.id}`}>编辑</Link></Button>
<Popconfirm
title="确定要删除吗?"
okText="是"
......
......@@ -23,11 +23,12 @@ export interface parmas {
batchAction?: Function,
reloadRef?: any,
type?: number,
column?: any
}
const ReviewList: React.FC<parmas> = (props) => {
const ref = useRef<any>({});
const { fetchData, selectAll, batchAction, reloadRef, type } = props;
const { fetchData, selectAll, batchAction, reloadRef, type, column} = props;
const [selectRow, setSelectRow] = useState([])
const [selectedRowKeys, setSelectedRowKeys] = useState<Array<number>>([]);
const [id, setId] = useState<number>();
......@@ -48,13 +49,7 @@ const ReviewList: React.FC<parmas> = (props) => {
})
const columns: ColumnType<any>[] = [
{
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/goodsOffer/components/details?id=${record.id}&page_type=${type}&view=1`}>{text}</EyePreview>
},
column,
{
title: '询价单摘要',
key: 'details',
......
......@@ -23,7 +23,7 @@ const EnquiryOrder: React.FC<{}> = (props) => {
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/goodsOffer/components/details?id=${record.id}&page_type=4&view=1`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/goodsOffer/enquiryOrder/details?id=${record.id}&page_type=4&view=1`}>{text}</EyePreview>
}, {
title: '询价单摘要',
key: 'details',
......
......@@ -3,6 +3,7 @@ import { message } from 'antd';
import ReviewList from '../components/reviewList';
import { timeRange } from '@/utils/index';
import { PublicApi } from '@/services/api';
import EyePreview from '@/components/EyePreview';
const PendingReviewOne: React.FC<{}> = () => {
const [selectRow, setSelectRow] = useState<Array<number>>([]);
......@@ -42,7 +43,7 @@ const PendingReviewOne: React.FC<{}> = () => {
const fetchData = (params?: any) => {
console.log(params)//可以直接打印参数
return new Promise((resolve, reject) => {
PublicApi.getOrderInquiryToAuditList({...params}).then(res => {
PublicApi.getOrderInquiryToAuditList({ ...params }).then(res => {
resolve(res.data)
})
// setTimeout(() => {
......@@ -65,6 +66,13 @@ const PendingReviewOne: React.FC<{}> = () => {
message.error('请选择要操作的询价单!')
}
}
const column = {
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/goodsOffer/pendingReviewOne/details?id=${record.id}&page_type=2&view=1`}>{text}</EyePreview>
}
return (
<ReviewList
reloadRef={ref}
......@@ -72,6 +80,7 @@ const PendingReviewOne: React.FC<{}> = () => {
selectAll={selectAll}
batchAction={batchAction}
type={2}
column={column}
/>
)
}
......
......@@ -3,6 +3,7 @@ import { message } from 'antd';
import ReviewList from '../components/reviewList';
import { timeRange } from '@/utils/index';
import { PublicApi } from '@/services/api';
import EyePreview from '@/components/EyePreview';
const PendingReviewTwo: React.FC<{}> = () => {
const [selectRow, setSelectRow] = useState<Array<number>>([]);
......@@ -12,7 +13,7 @@ const PendingReviewTwo: React.FC<{}> = () => {
setSelectRow(values);
console.log(values, '我是多选的id')
}
// 列表数据
//列表数据
// const data = { // 模拟的数据
// totalCount: 6,
// data: [{
......@@ -65,6 +66,14 @@ const PendingReviewTwo: React.FC<{}> = () => {
message.error('请选择要操作的询价单!')
}
}
const column = {
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/goodsOffer/pendingReviewTwo/details?id=${record.id}&page_type=3&view=1`}>{text}</EyePreview>
}
return (
<ReviewList
reloadRef={ref}
......@@ -72,6 +81,7 @@ const PendingReviewTwo: React.FC<{}> = () => {
selectAll={selectAll}
batchAction={batchAction}
type={3}
column={column}
/>
)
}
......
......@@ -30,7 +30,7 @@ const PendingSubmit: React.FC<{}> = () => {
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/goodsOffer/components/details?id=${record.id}&page_type=1&view=1`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/goodsOffer/pendingSubmit/details?id=${record.id}&page_type=1&view=1`}>{text}</EyePreview>
},
{
title: '询价单摘要',
......
......@@ -27,13 +27,13 @@ const AddInquiryOrder: React.FC<{}> = () => {
key: 'quotationNo',
dataIndex: 'quotationNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/inquiryQuote/components/details?id=${record.id}&page_type=6&view=2`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/inquiryQuote/addInquiryOrder/details?id=${record.id}&page_type=6&view=2`}>{text}</EyePreview>
}, {
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/inquiryQuote/components/details?id=${record.id}&page_type=6&view=1`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/inquiryQuote/addInquiryOrder/details?id=${record.id}&page_type=6&view=1`}>{text}</EyePreview>
}, {
title: '询价单摘要',
key: 'details',
......@@ -78,7 +78,7 @@ const AddInquiryOrder: React.FC<{}> = () => {
return (
<>
<Button type='link' >提交审核</Button>
<Button type="link"><Link to={`/memberCenter/tranactionAbility/inquiryQuote/addInquiryOrder/add?id=${record.id}`}>编辑</Link></Button>
<Button type="link"><Link to={`/memberCenter/tranactionAbility/inquiryQuote/addInquiryOrder/edit?id=${record.id}`}>编辑</Link></Button>
<Popconfirm
destroyTooltipOnHide
title="确定要删除吗?"
......
......@@ -23,11 +23,12 @@ export interface parmas {
batchAction?: Function,
reloadRef?: any,
type?: number,
column?: any
}
const ReviewList: React.FC<parmas> = (props) => {
const ref = useRef<any>({});
const { fetchData, selectAll, batchAction, reloadRef, type } = props;
const { fetchData, selectAll, batchAction, reloadRef, type, column } = props;
const [selectRow, setSelectRow] = useState([])
const [selectedRowKeys, setSelectedRowKeys] = useState<Array<number>>([]);
const [id, setId] = useState<number>();
......@@ -48,20 +49,7 @@ const ReviewList: React.FC<parmas> = (props) => {
})
const columns: ColumnType<any>[] = [
{
title: '报价单号',
key: 'quotationNo',
dataIndex: 'quotationNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/inquiryQuote/components/details?id=${record.id}&page_type=${type}&view=2`}>{text}</EyePreview>
},
{
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/inquiryQuote/components/details?id=${record.id}&page_type=${type}&view=1`}>{text}</EyePreview>
},
...column,
{
title: '询价单摘要',
key: 'details',
......
......@@ -23,7 +23,7 @@ const EnquiryOrder: React.FC<{}> = (props) => {
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/inquiryQuote/components/details?id=${record.id}&page_type=4&view=1`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/inquiryQuote/enquiryOrder/details?id=${record.id}&page_type=4&view=1`}>{text}</EyePreview>
}, {
title: '询价单摘要',
key: 'details',
......
......@@ -3,6 +3,8 @@ import { message } from 'antd';
import ReviewList from '../components/reviewList';
import { timeRange } from '@/utils/index';
import { PublicApi } from '@/services/api';
import { ColumnType } from 'antd/lib/table/interface';
import EyePreview from '@/components/EyePreview';
const PendingReviewOne: React.FC<{}> = () => {
const [selectRow, setSelectRow] = useState<Array<number>>([]);
......@@ -65,6 +67,20 @@ const PendingReviewOne: React.FC<{}> = () => {
message.error('请选择要操作的询价单!')
}
}
const column: ColumnType<any>[] = [{
title: '报价单号',
key: 'quotationNo',
dataIndex: 'quotationNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/inquiryQuote/pendingReviewOne/details?id=${record.id}&page_type=2&view=2`}>{text}</EyePreview>
},
{
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/inquiryQuote/pendingReviewOne/details?id=${record.id}&page_type=2&view=1`}>{text}</EyePreview>
}]
return (
<ReviewList
reloadRef={ref}
......@@ -72,6 +88,7 @@ const PendingReviewOne: React.FC<{}> = () => {
selectAll={selectAll}
batchAction={batchAction}
type={2}
column={column}
/>
)
}
......
......@@ -3,6 +3,8 @@ import { message } from 'antd';
import ReviewList from '../components/reviewList';
import { timeRange } from '@/utils/index';
import { PublicApi } from '@/services/api';
import { ColumnType } from 'antd/lib/table/interface';
import EyePreview from '@/components/EyePreview';
const PendingReviewTwo: React.FC<{}> = () => {
const [selectRow, setSelectRow] = useState<Array<number>>([]);
......@@ -65,6 +67,20 @@ const PendingReviewTwo: React.FC<{}> = () => {
message.error('请选择要操作的询价单!')
}
}
const column: ColumnType<any>[] = [{
title: '报价单号',
key: 'quotationNo',
dataIndex: 'quotationNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/inquiryQuote/pendingReviewOne/details?id=${record.id}&page_type=2&view=2`}>{text}</EyePreview>
},
{
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/inquiryQuote/pendingReviewOne/details?id=${record.id}&page_type=2&view=1`}>{text}</EyePreview>
}]
return (
<ReviewList
reloadRef={ref}
......@@ -72,6 +88,7 @@ const PendingReviewTwo: React.FC<{}> = () => {
selectAll={selectAll}
batchAction={batchAction}
type={3}
column={column}
/>
)
}
......
......@@ -29,13 +29,13 @@ const PendingSubmit: React.FC<{}> = () => {
key: 'quotationNo',
dataIndex: 'quotationNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/inquiryQuote/components/details?id=${record.id}&page_type=1&view=2`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/inquiryQuote/pendingSubmit/details?id=${record.id}&page_type=1&view=2`}>{text}</EyePreview>
}, {
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/inquiryQuote/components/details?id=${record.id}&page_type=1&view=1`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/inquiryQuote/pendingSubmit/details?id=${record.id}&page_type=1&view=1`}>{text}</EyePreview>
}, {
title: '询价单摘要',
key: 'details',
......
......@@ -23,13 +23,13 @@ const EnquiryOrder: React.FC<{}> = (props) => {
key: 'quotationNo',
dataIndex: 'quotationNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/inquiryQuote/components/details?id=${record.id}&page_type=5&view=2`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/inquiryQuote/quoteOrder/details?id=${record.id}&page_type=5&view=2`}>{text}</EyePreview>
},{
title: '询价单号',
key: 'inquiryListNo',
dataIndex: 'inquiryListNo',
render: (text: any, record: any) => <EyePreview
url={`/memberCenter/tranactionAbility/inquiryQuote/components/details?id=${record.id}&page_type=5&view=1`}>{text}</EyePreview>
url={`/memberCenter/tranactionAbility/inquiryQuote/quoteOrder/details?id=${record.id}&page_type=5&view=1`}>{text}</EyePreview>
}, {
title: '询价单摘要',
key: 'details',
......
import React, { useEffect, useState } from 'react';
import { Tabs, Row, Col, Button } from 'antd';
import { history } from 'umi';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { PublicApi } from '@/services/api';
import { isJSONStr } from '@/utils';
......@@ -169,6 +170,7 @@ const Analysis: React.FC = () => {
data: data.map(item => {
const product = isJSONStr(item.product) || {};
return {
id: item.id,
star: item.star,
comment: item.comment,
productName: product.productName || '',
......@@ -176,6 +178,7 @@ const Analysis: React.FC = () => {
quantity: product.purchaseCount,
created: item.createTime,
target: item.byMemberName,
orderId: product.orderId,
};
}),
totalCount,
......@@ -200,6 +203,7 @@ const Analysis: React.FC = () => {
data: data.map(item => {
const product = isJSONStr(item.product) || {};
return {
id: item.id,
star: item.star,
comment: item.comment,
productName: product.productName || '',
......@@ -207,6 +211,7 @@ const Analysis: React.FC = () => {
quantity: product.purchaseCount,
created: item.dealTime as string,
target: item.memberName,
orderId: product.orderId,
};
}),
totalCount,
......@@ -233,6 +238,7 @@ const Analysis: React.FC = () => {
data: data.map(item => {
const product = isJSONStr(item.product) || {};
return {
id: item.id,
star: item.star,
comment: item.comment,
productName: product.productName || '',
......@@ -240,6 +246,7 @@ const Analysis: React.FC = () => {
quantity: product.purchaseCount,
created: item.dealTime as string,
target: item.subMemberName,
orderId: product.orderId,
};
}),
totalCount,
......@@ -284,6 +291,18 @@ const Analysis: React.FC = () => {
getTradeSummary();
}, []);
const handleJumpReceived = record => {
history.push(`/memberCenter/tranactionAbility/purchaserEvaluation/received/detail?orderId=${record.orderId}&id=${record.id}&preview=1`);
};
const handleEditSent = record => {
history.push(`/memberCenter/tranactionAbility/purchaserEvaluation/sent/edit?orderId=${record.orderId}&id=${record.id}&preview=0`);
};
const handleJumpSent = record => {
history.push(`/memberCenter/tranactionAbility/purchaserEvaluation/sent/detail?orderId=${record.orderId}&id=${record.id}&preview=1`);
};
return (
<PageHeaderWrapper>
<MellowCard
......@@ -324,16 +343,30 @@ const Analysis: React.FC = () => {
</Shelves>
<Shelves title="评价记录">
<RecordList fetchList={getTradeHistory} paginationType="button" searchable={false} />
<RecordList
fetchList={getTradeHistory}
paginationType="button"
searchable={false}
onCheck={handleJumpReceived}
/>
</Shelves>
</TabPane>
<TabPane tab="收到的评价" key="2">
<RecordList fetchList={getReceivedList} />
<RecordList
fetchList={getReceivedList}
onCheck={handleJumpReceived}
/>
</TabPane>
<TabPane tab="发出的评价" key="3">
<RecordList fetchList={getSentList} />
<RecordList
fetchList={getSentList}
onCheck={handleJumpSent}
onEdit={handleEditSent}
opposite={false}
editable={true}
/>
</TabPane>
</Tabs>
</MellowCard>
......
......@@ -74,6 +74,10 @@ export interface RecordItem {
* 评价方/被评价方
*/
target: string
/**
* 订单id
*/
orderId: string
};
export interface RecordRes {
......@@ -91,7 +95,14 @@ interface RecordListProps {
// 是否是查看收到的品论
opposite?: boolean;
// 是否可编辑的
editable?: boolean;
fetchList: (params: ListParams) => Promise<RecordRes>;
onCheck: (record: RecordItem) => void;
onEdit?: (record: RecordItem) => void;
};
interface RecordListState {
......@@ -140,8 +151,12 @@ export default class RecordList extends React.Component<RecordListProps, RecordL
this.setState({ loading: true });
return new Promise((resolve, reject) => {
const { searchVal, page, size } = this.state;
const { dealTimeStart, dealTimeEnd } = searchVal;
fetchList({
...searchVal,
dealTimeStart: dealTimeStart ? moment(+dealTimeStart).format('YYYY-MM-DD HH:mm:ss') : null,
dealTimeEnd: dealTimeEnd ? moment(+dealTimeEnd).format('YYYY-MM-DD HH:mm:ss') : null,
current: `${page}`,
pageSize: `${size}`,
}).then(res => {
......@@ -210,11 +225,26 @@ export default class RecordList extends React.Component<RecordListProps, RecordL
});
};
handleCheck = record => {
const { onCheck } = this.props;
if (onCheck) {
onCheck(record);
}
};
handleEdit = record => {
const { onEdit } = this.props;
if (onEdit) {
onEdit(record);
}
};
render() {
const {
paginationType = 'pagination',
searchable = true,
opposite = true,
editable = false,
} = this.props;
const { page, size, loading, receivedList, hasMore } = this.state;
......@@ -232,7 +262,12 @@ export default class RecordList extends React.Component<RecordListProps, RecordL
)}
<Spin spinning={paginationType === 'pagination' && loading}>
<ul className={styles.record}>
<ul
className={styles.record}
style={{
minHeight: loading ? 69 : 'auto',
}}
>
{receivedList.data.map((item, index) => (
<li className={styles['record-item']} key={index}>
<div className={styles['record-item-good']}>
......@@ -272,7 +307,10 @@ export default class RecordList extends React.Component<RecordListProps, RecordL
</div>
<div className={styles['record-item-actions']}>
<Button type="link">查看</Button>
{editable && (
<Button type="link" onClick={() => this.handleEdit(item)}>编辑</Button>
)}
<Button type="link" onClick={() => this.handleCheck(item)}>查看</Button>
</div>
</li>
))}
......
......@@ -19,7 +19,28 @@ export const searchSchema: ISchema = {
properties: {
star: {
type: 'string',
enum: [],
enum: [
{
label: '一星',
value: 1,
},
{
label: '二星',
value: 2,
},
{
label: '三星',
value: 3,
},
{
label: '四星',
value: 4,
},
{
label: '五星',
value: 5,
},
],
'x-component-props': {
placeholder: '评论星级',
allowClear: true,
......
import { useBusinessEffects } from './useBusinessEffects';
export const createEffects = (context, actions) => {
useBusinessEffects(context, actions);
};
\ No newline at end of file
import { FormEffectHooks, FormPath } from '@formily/antd';
const {
onFieldInputChange$,
onFieldValueChange$,
} = FormEffectHooks;
export const useBusinessEffects = (context, actions) => {
const {
setFieldState,
} = actions;
// 评论图片限制 4 张
onFieldInputChange$('comments.*.picture').subscribe(fieldState => {
const { name, value } = fieldState;
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `comments.${$1}.picture`
}),
state => {
state.props['x-component-props'].disabled = value.length >= 4;
}
);
});
// 评分联动
onFieldInputChange$('comments.*.star').subscribe(fieldState => {
const { name, value } = fieldState;
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `comments.${$1}.smile`
}),
state => {
state.value = value;
}
);
});
}
\ No newline at end of file
import React, { useState, useEffect } from 'react';
import {
PageHeader,
Descriptions,
Card,
Spin,
Button,
message,
} from 'antd';
import { FormOutlined } from '@ant-design/icons';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { history } from 'umi';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import { usePageStatus, PageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import { GetOrderPurchaseOrderDetailsResponse } from '@/services/OrderApi';
import { normalizeFiledata, isJSONStr } from '@/utils';
import AvatarWrap from '@/components/AvatarWrap';
import NiceForm from '@/components/NiceForm';
import { normalizeUnevaluatedList } from '../../utils';
import { evaluateSchema } from './schema';
import { createEffects } from './effects';
import EvaluationList from '../../components/EvaluationList';
import styles from './index.less';
const formActions = createFormActions();
interface Unevaluated {
good: {
pic: string,
productName: string,
price: string,
purchaseCount: string,
};
star: number;
comment: string;
picture: string[];
smile: number;
};
const ReceivedDetail: React.FC = () => {
const { orderId, id, pageStatus } = usePageStatus();
const [orderInfo, setOrderInfo] = useState<GetOrderPurchaseOrderDetailsResponse>(null);
const [orderInfoLoading, setOrderInfoLoading] = useState(false);
const [evaluationInfo, setEvaluationInfo] = useState<Unevaluated>(null);
const [evaluationInfoLoading, setEvaluationInfoLoading] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const getOrderInfo = () => {
if (!orderId) {
return;
}
setOrderInfoLoading(true);
PublicApi.getOrderProcurementOrderDetails({
id: orderId,
}).then(res => {
if (res.code === 1000) {
setOrderInfo(res.data);
}
}).finally(() => {
setOrderInfoLoading(false);
});
};
const getEvaluationInfo = () => {
if (!id) {
return;
}
setEvaluationInfoLoading(true);
PublicApi.getMemberCommentConsumerReceiveTradeHistoryGet({
id,
}).then(res => {
if (res.code === 1000) {
const { product } = res.data;
const productObj = isJSONStr(product) || {};
setEvaluationInfo({
good: {
pic: productObj.pic,
productName: productObj.productName,
price: productObj.price,
purchaseCount: productObj.purchaseCount,
},
star: res.data.star,
comment: res.data.comment,
picture: res.data.pics ? res.data.pics.map(item => normalizeFiledata(item)) : [],
smile: res.data.star,
});
}
}).finally(() => {
setEvaluationInfoLoading(false);
});
};
useEffect(() => {
getOrderInfo();
getEvaluationInfo();
}, []);
const handleSubmit = values => {
};
const beforeUpload = file => {
if (file.size / 1024 < 10) {
message.warning('图片大小超过10M');
return Promise.reject();
}
};
const UploadTip = (
<span
style={{
lineHeight: '24px',
color: '#909399',
fontWeight: 400,
wordBreak: 'break-all',
position: 'relative',
top: '34px',
}}
>
支持JPG/PNG/JPEG <br />每张最大不超过 10M,尺寸不限 <br />最大数量限制 4张
</span>
);
return (
<Spin spinning={orderInfoLoading || evaluationInfoLoading}>
<PageHeaderWrapper
title={
<>
<PageHeader
style={{ padding: '0' }}
onBack={() => history.goBack()}
title={
<AvatarWrap
info={{
aloneTxt: '单',
name: orderInfo?.orderNo,
}}
/>
}
extra={(
<>
{
pageStatus === PageStatus.EDIT && (
<Button
type="primary"
icon={<FormOutlined />}
loading={submitLoading}
onClick={() => formActions.submit()}
>
修改
</Button>
)
}
</>
)}
>
<Descriptions
size="small"
column={3}
style={{
padding: '0 32px',
}}
>
<Descriptions.Item label="供应会员">{orderInfo?.supplyMembersName}</Descriptions.Item>
<Descriptions.Item label="下单时间" span={2}>{orderInfo?.createTime}</Descriptions.Item>
</Descriptions>
</PageHeader>
</>
}
>
<NiceForm
actions={formActions}
initialValues={{
comments: [evaluationInfo],
}}
editable={pageStatus === PageStatus.EDIT}
expressionScope={{
UploadTip: pageStatus === PageStatus.EDIT ? UploadTip : null,
beforeUpload,
}}
onSubmit={handleSubmit}
components={{
EvaluationList,
}}
effects={($, actions) => {
createEffects($, actions);
}}
schema={evaluateSchema}
/>
</PageHeaderWrapper>
</Spin>
);
};
export default ReceivedDetail;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-09-23 17:00:24
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-21 13:47:51
* @Description:
*/
import { ISchema } from '@formily/antd';
import { UPLOAD_TYPE } from '@/constants';
export const evaluateSchema: ISchema = {
type: 'object',
properties: {
comments: {
type: 'array',
'x-component': 'EvaluationList',
default: [],
items: {
type: 'object',
properties: {
LEFT_RIGHT: {
type: 'object',
'x-component': 'LeftRightLayout',
'x-component-props': {
rightProps: {
span: 2,
offset: 4,
},
},
properties: {
MEGA_LADYOUT: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
labelCol: 6,
labelAlign: 'left',
position: 'left',
},
properties: {
star: {
title: '满意程度',
required: true,
'x-component': 'Rating',
'x-component-props': {
allowHalf: false,
},
'x-rules': [
{
required: true,
message: '请选择满意程度',
},
],
},
comment: {
type: 'string',
title: '评价',
'x-component': 'TextArea',
'x-component-props': {
rows: 4,
},
'x-rules': {
max: 200,
},
},
picture: {
type: 'string',
title: '图片',
'x-component': 'Upload',
'x-component-props': {
listType: 'card',
action: '/api/file/file/upload/prefix',
data: {
fileType: UPLOAD_TYPE,
prefix: '/purchaserEvaluation/',
},
beforeUpload: '{{beforeUpload}}',
accept: '.png, .jpg, .jpeg',
},
'x-mega-props': {
addonAfter: '{{UploadTip}}',
},
},
},
},
smile: {
type: 'object',
default: 1,
'x-component': 'SmilingFace',
'x-component-props': {
position: 'right',
},
},
},
},
},
},
},
},
};
\ No newline at end of file
import { useBusinessEffects } from './useBusinessEffects';
export const createEffects = (context, actions) => {
useBusinessEffects(context, actions);
};
\ No newline at end of file
import { FormEffectHooks, FormPath } from '@formily/antd';
const {
onFieldInputChange$,
onFieldValueChange$,
} = FormEffectHooks;
export const useBusinessEffects = (context, actions) => {
const {
setFieldState,
} = actions;
// 评论图片限制 4 张
onFieldInputChange$('comments.*.picture').subscribe(fieldState => {
const { name, value } = fieldState;
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `comments.${$1}.picture`
}),
state => {
state.props['x-component-props'].disabled = value.length >= 4;
}
);
});
// 评分联动
onFieldInputChange$('comments.*.star').subscribe(fieldState => {
const { name, value } = fieldState;
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `comments.${$1}.smile`
}),
state => {
state.value = value;
}
);
});
}
\ No newline at end of file
import React, { useState, useEffect } from 'react';
import {
PageHeader,
Descriptions,
Card,
Spin,
Button,
message,
} from 'antd';
import { FormOutlined } from '@ant-design/icons';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { history } from 'umi';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import { usePageStatus, PageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import { GetOrderPurchaseOrderDetailsResponse } from '@/services/OrderApi';
import { normalizeFiledata, isJSONStr } from '@/utils';
import AvatarWrap from '@/components/AvatarWrap';
import NiceForm from '@/components/NiceForm';
import { normalizeUnevaluatedList } from '../../utils';
import { evaluateSchema } from './schema';
import { createEffects } from './effects';
import EvaluationList from '../../components/EvaluationList';
import styles from './index.less';
const formActions = createFormActions();
const {
onFormInit$,
} = FormEffectHooks;
interface Unevaluated {
good: {
pic: string,
productName: string,
price: string,
purchaseCount: string,
};
star: number;
comment: string;
picture: string[];
smile: number;
};
const SentDetail: React.FC = () => {
const { orderId, id, pageStatus } = usePageStatus();
const [orderInfo, setOrderInfo] = useState<GetOrderPurchaseOrderDetailsResponse>(null);
const [orderInfoLoading, setOrderInfoLoading] = useState(false);
const [evaluationInfo, setEvaluationInfo] = useState<Unevaluated>(null);
const [evaluationInfoLoading, setEvaluationInfoLoading] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const getOrderInfo = () => {
if (!orderId) {
return;
}
setOrderInfoLoading(true);
PublicApi.getOrderProcurementOrderDetails({
id: orderId,
}).then(res => {
if (res.code === 1000) {
setOrderInfo(res.data);
}
}).finally(() => {
setOrderInfoLoading(false);
});
};
const getEvaluationInfo = () => {
if (!id) {
return;
}
setEvaluationInfoLoading(true);
PublicApi.getMemberCommentConsumerSendTradeHistoryGet({
id,
}).then(res => {
if (res.code === 1000) {
const { product } = res.data;
const productObj = isJSONStr(product) || {};
setEvaluationInfo({
good: {
pic: productObj.pic,
productName: productObj.productName,
price: productObj.price,
purchaseCount: productObj.purchaseCount,
},
star: res.data.star,
comment: res.data.comment,
picture: res.data.pics ? res.data.pics.map(item => normalizeFiledata(item)) : [],
smile: res.data.star,
});
}
}).finally(() => {
setEvaluationInfoLoading(false);
});
};
useEffect(() => {
getOrderInfo();
getEvaluationInfo();
}, []);
const handleSubmit = values => {
setSubmitLoading(true);
const payload = values.comments.map(item => {
const {
comment,
good,
picture,
star,
} = item;
return {
id,
star,
comment,
};
});
if (!payload.length) {
return;
}
PublicApi.postMemberCommentConsumerSendTradeHistoryUpdate(payload[0])
.then(res => {
if (res.code === 1000) {
setTimeout(() => {
history.goBack();
}, 800);
}
})
.finally(() => {
setSubmitLoading(false);
});
};
const beforeUpload = file => {
if (file.size / 1024 < 10) {
message.warning('图片大小超过10M');
return Promise.reject();
}
};
const UploadTip = (
<span
style={{
lineHeight: '24px',
color: '#909399',
fontWeight: 400,
wordBreak: 'break-all',
position: 'relative',
top: '34px',
}}
>
支持JPG/PNG/JPEG <br />每张最大不超过 10M,尺寸不限 <br />最大数量限制 4张
</span>
);
return (
<Spin spinning={orderInfoLoading || evaluationInfoLoading}>
<PageHeaderWrapper
title={
<>
<PageHeader
style={{ padding: '0' }}
onBack={() => history.goBack()}
title={
<AvatarWrap
info={{
aloneTxt: '单',
name: orderInfo?.orderNo,
}}
/>
}
extra={(
<>
{
pageStatus === PageStatus.EDIT && (
<Button
type="primary"
icon={<FormOutlined />}
disabled={!id}
loading={submitLoading}
onClick={() => formActions.submit()}
>
修改
</Button>
)
}
</>
)}
>
<Descriptions
size="small"
column={3}
style={{
padding: '0 32px',
}}
>
<Descriptions.Item label="供应会员">{orderInfo?.supplyMembersName}</Descriptions.Item>
<Descriptions.Item label="下单时间" span={2}>{orderInfo?.createTime}</Descriptions.Item>
</Descriptions>
</PageHeader>
</>
}
>
<NiceForm
actions={formActions}
initialValues={{
comments: [evaluationInfo],
}}
editable={pageStatus === PageStatus.EDIT}
expressionScope={{
UploadTip: pageStatus === PageStatus.EDIT ? UploadTip : null,
beforeUpload,
}}
onSubmit={handleSubmit}
components={{
EvaluationList,
}}
effects={($, actions) => {
createEffects($, actions);
onFormInit$().subscribe(() => {
if (pageStatus === PageStatus.EDIT) {
actions.setFieldState(
'comments.*.picture',
state => {
state.visible = false;
}
);
}
});
}}
schema={evaluateSchema}
/>
</PageHeaderWrapper>
</Spin>
);
};
export default SentDetail;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-09-23 17:00:24
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-19 16:23:24
* @Description:
*/
import { ISchema } from '@formily/antd';
import { UPLOAD_TYPE } from '@/constants';
export const evaluateSchema: ISchema = {
type: 'object',
properties: {
comments: {
type: 'array',
'x-component': 'EvaluationList',
default: [],
items: {
type: 'object',
properties: {
LEFT_RIGHT: {
type: 'object',
'x-component': 'LeftRightLayout',
'x-component-props': {
rightProps: {
span: 2,
offset: 4,
},
},
properties: {
MEGA_LADYOUT: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
labelCol: 6,
labelAlign: 'left',
position: 'left',
},
properties: {
star: {
title: '满意程度',
required: true,
'x-component': 'Rating',
'x-component-props': {
allowHalf: false,
},
'x-rules': [
{
required: true,
message: '请选择满意程度',
},
],
},
comment: {
type: 'string',
title: '评价',
'x-component': 'TextArea',
'x-component-props': {
rows: 4,
},
'x-rules': {
max: 200,
},
},
picture: {
type: 'string',
title: '图片',
'x-component': 'Upload',
'x-component-props': {
listType: 'card',
action: '/api/file/file/upload/prefix',
data: {
fileType: UPLOAD_TYPE,
prefix: '/purchaserEvaluation/',
},
beforeUpload: '{{beforeUpload}}',
accept: '.png, .jpg, .jpeg',
},
'x-mega-props': {
addonAfter: '{{UploadTip}}',
},
},
},
},
smile: {
type: 'object',
default: 1,
'x-component': 'SmilingFace',
'x-component-props': {
position: 'right',
},
},
},
},
},
},
},
},
};
\ No newline at end of file
......@@ -58,6 +58,9 @@ export const evaluateSchema: ISchema = {
'x-component-props': {
rows: 4,
},
'x-rules': {
max: 200,
},
},
picture: {
type: 'string',
......@@ -68,7 +71,7 @@ export const evaluateSchema: ISchema = {
action: '/api/file/file/upload/prefix',
data: {
fileType: UPLOAD_TYPE,
prefix: '/supplierEvaluation/',
prefix: '/purchaserEvaluation/',
},
beforeUpload: '{{beforeUpload}}',
accept: '.png, .jpg, .jpeg',
......
import React, { useEffect, useState } from 'react';
import { Tabs, Row, Col, Button } from 'antd';
import { history } from 'umi';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { PublicApi } from '@/services/api';
import { isJSONStr } from '@/utils';
......@@ -169,6 +170,7 @@ const Analysis: React.FC = () => {
data: data.map(item => {
const product = isJSONStr(item.product) || {};
return {
id: item.id,
star: item.star,
comment: item.comment,
productName: product.productName || '',
......@@ -176,6 +178,7 @@ const Analysis: React.FC = () => {
quantity: product.purchaseCount,
created: item.createTime,
target: item.byMemberName,
orderId: product.orderId,
};
}),
totalCount,
......@@ -200,6 +203,7 @@ const Analysis: React.FC = () => {
data: data.map(item => {
const product = isJSONStr(item.product) || {};
return {
id: item.id,
star: item.star,
comment: item.comment,
productName: product.productName || '',
......@@ -207,6 +211,7 @@ const Analysis: React.FC = () => {
quantity: product.purchaseCount,
created: item.dealTime as string,
target: item.memberName,
orderId: product.orderId,
};
}),
totalCount,
......@@ -233,6 +238,7 @@ const Analysis: React.FC = () => {
data: data.map(item => {
const product = isJSONStr(item.product) || {};
return {
id: item.id,
star: item.star,
comment: item.comment,
productName: product.productName || '',
......@@ -240,6 +246,7 @@ const Analysis: React.FC = () => {
quantity: product.purchaseCount,
created: item.dealTime as string,
target: item.subMemberName,
orderId: product.orderId,
};
}),
totalCount,
......@@ -284,6 +291,18 @@ const Analysis: React.FC = () => {
getTradeSummary();
}, []);
const handleJumpReceived = record => {
history.push(`/memberCenter/tranactionAbility/supplierEvaluation/received/detail?orderId=${record.orderId}&id=${record.id}&preview=1`);
};
const handleEditSent = record => {
history.push(`/memberCenter/tranactionAbility/supplierEvaluation/sent/edit?orderId=${record.orderId}&id=${record.id}&preview=0`);
};
const handleJumpSent = record => {
history.push(`/memberCenter/tranactionAbility/supplierEvaluation/sent/detail?orderId=${record.orderId}&id=${record.id}&preview=1`);
};
return (
<PageHeaderWrapper>
<MellowCard
......@@ -324,16 +343,30 @@ const Analysis: React.FC = () => {
</Shelves>
<Shelves title="评价记录">
<RecordList fetchList={getTradeHistory} paginationType="button" searchable={false} />
<RecordList
fetchList={getTradeHistory}
paginationType="button"
searchable={false}
onCheck={handleJumpReceived}
/>
</Shelves>
</TabPane>
<TabPane tab="收到的评价" key="2">
<RecordList fetchList={getReceivedList} />
<RecordList
fetchList={getReceivedList}
onCheck={handleJumpReceived}
/>
</TabPane>
<TabPane tab="发出的评价" key="3">
<RecordList fetchList={getSentList} />
<RecordList
fetchList={getSentList}
onCheck={handleJumpSent}
onEdit={handleEditSent}
opposite={false}
editable={true}
/>
</TabPane>
</Tabs>
</MellowCard>
......
......@@ -74,6 +74,10 @@ export interface RecordItem {
* 评价方/被评价方
*/
target: string
/**
* 订单id
*/
orderId: string
};
export interface RecordRes {
......@@ -91,7 +95,14 @@ interface RecordListProps {
// 是否是查看收到的品论
opposite?: boolean;
// 是否可编辑的
editable?: boolean;
fetchList: (params: ListParams) => Promise<RecordRes>;
onCheck: (record: RecordItem) => void;
onEdit?: (record: RecordItem) => void;
};
interface RecordListState {
......@@ -140,8 +151,12 @@ export default class RecordList extends React.Component<RecordListProps, RecordL
this.setState({ loading: true });
return new Promise((resolve, reject) => {
const { searchVal, page, size } = this.state;
const { dealTimeStart, dealTimeEnd } = searchVal;
fetchList({
...searchVal,
dealTimeStart: dealTimeStart ? moment(+dealTimeStart).format('YYYY-MM-DD HH:mm:ss') : null,
dealTimeEnd: dealTimeEnd ? moment(+dealTimeEnd).format('YYYY-MM-DD HH:mm:ss') : null,
current: `${page}`,
pageSize: `${size}`,
}).then(res => {
......@@ -210,11 +225,26 @@ export default class RecordList extends React.Component<RecordListProps, RecordL
});
};
handleCheck = record => {
const { onCheck } = this.props;
if (onCheck) {
onCheck(record);
}
};
handleEdit = record => {
const { onEdit } = this.props;
if (onEdit) {
onEdit(record);
}
};
render() {
const {
paginationType = 'pagination',
searchable = true,
opposite = true,
editable = false,
} = this.props;
const { page, size, loading, receivedList, hasMore } = this.state;
......@@ -232,7 +262,12 @@ export default class RecordList extends React.Component<RecordListProps, RecordL
)}
<Spin spinning={paginationType === 'pagination' && loading}>
<ul className={styles.record}>
<ul
className={styles.record}
style={{
minHeight: loading ? 69 : 'auto',
}}
>
{receivedList.data.map((item, index) => (
<li className={styles['record-item']} key={index}>
<div className={styles['record-item-good']}>
......@@ -272,7 +307,10 @@ export default class RecordList extends React.Component<RecordListProps, RecordL
</div>
<div className={styles['record-item-actions']}>
<Button type="link">查看</Button>
{editable && (
<Button type="link" onClick={() => this.handleEdit(item)}>编辑</Button>
)}
<Button type="link" onClick={() => this.handleCheck(item)}>查看</Button>
</div>
</li>
))}
......
......@@ -2,7 +2,7 @@
* @Author: XieZhiXiong
* @Date: 2020-10-19 18:08:51
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-19 18:09:31
* @LastEditTime: 2020-10-21 13:58:50
* @Description:
*/
import { ISchema } from '@formily/antd';
......@@ -19,7 +19,28 @@ export const searchSchema: ISchema = {
properties: {
star: {
type: 'string',
enum: [],
enum: [
{
label: '一星',
value: 1,
},
{
label: '二星',
value: 2,
},
{
label: '三星',
value: 3,
},
{
label: '四星',
value: 4,
},
{
label: '五星',
value: 5,
},
],
'x-component-props': {
placeholder: '评论星级',
allowClear: true,
......
import { useBusinessEffects } from './useBusinessEffects';
export const createEffects = (context, actions) => {
useBusinessEffects(context, actions);
};
\ No newline at end of file
import { FormEffectHooks, FormPath } from '@formily/antd';
const {
onFieldInputChange$,
onFieldValueChange$,
} = FormEffectHooks;
export const useBusinessEffects = (context, actions) => {
const {
setFieldState,
} = actions;
// 评论图片限制 4 张
onFieldInputChange$('comments.*.picture').subscribe(fieldState => {
const { name, value } = fieldState;
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `comments.${$1}.picture`
}),
state => {
state.props['x-component-props'].disabled = value.length >= 4;
}
);
});
// 评分联动
onFieldInputChange$('comments.*.star').subscribe(fieldState => {
const { name, value } = fieldState;
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `comments.${$1}.smile`
}),
state => {
state.value = value;
}
);
});
}
\ No newline at end of file
import React, { useState, useEffect } from 'react';
import {
PageHeader,
Descriptions,
Card,
Spin,
Button,
message,
} from 'antd';
import { FormOutlined } from '@ant-design/icons';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { history } from 'umi';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import { usePageStatus, PageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import { GetOrderPurchaseOrderDetailsResponse } from '@/services/OrderApi';
import { normalizeFiledata, isJSONStr } from '@/utils';
import AvatarWrap from '@/components/AvatarWrap';
import NiceForm from '@/components/NiceForm';
import { normalizeUnevaluatedList } from '../../utils';
import { evaluateSchema } from './schema';
import { createEffects } from './effects';
import EvaluationList from '../../components/EvaluationList';
import styles from './index.less';
const formActions = createFormActions();
interface Unevaluated {
good: {
pic: string,
productName: string,
price: string,
purchaseCount: string,
};
star: number;
comment: string;
picture: string[];
smile: number;
};
const ReceivedDetail: React.FC = () => {
const { orderId, id, pageStatus } = usePageStatus();
const [orderInfo, setOrderInfo] = useState<GetOrderPurchaseOrderDetailsResponse>(null);
const [orderInfoLoading, setOrderInfoLoading] = useState(false);
const [evaluationInfo, setEvaluationInfo] = useState<Unevaluated>(null);
const [evaluationInfoLoading, setEvaluationInfoLoading] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const getOrderInfo = () => {
if (!orderId) {
return;
}
setOrderInfoLoading(true);
PublicApi.getOrderPurchaseOrderDetails({
id: orderId,
}).then(res => {
if (res.code === 1000) {
setOrderInfo(res.data);
}
}).finally(() => {
setOrderInfoLoading(false);
});
};
const getEvaluationInfo = () => {
if (!id) {
return;
}
setEvaluationInfoLoading(true);
PublicApi.getMemberCommentSupplySupplyTradeHistoryGet({
id,
}).then(res => {
if (res.code === 1000) {
const { product } = res.data;
const productObj = isJSONStr(product) || {};
setEvaluationInfo({
good: {
pic: productObj.pic,
productName: productObj.productName,
price: productObj.price,
purchaseCount: productObj.purchaseCount,
},
star: res.data.star,
comment: res.data.comment,
picture: res.data.pics ? res.data.pics.map(item => normalizeFiledata(item)) : [],
smile: res.data.star,
});
}
}).finally(() => {
setEvaluationInfoLoading(false);
});
};
useEffect(() => {
getOrderInfo();
getEvaluationInfo();
}, []);
const handleSubmit = values => {
};
const beforeUpload = file => {
if (file.size / 1024 < 10) {
message.warning('图片大小超过10M');
return Promise.reject();
}
};
const UploadTip = (
<span
style={{
lineHeight: '24px',
color: '#909399',
fontWeight: 400,
wordBreak: 'break-all',
position: 'relative',
top: '34px',
}}
>
支持JPG/PNG/JPEG <br />每张最大不超过 10M,尺寸不限 <br />最大数量限制 4张
</span>
);
return (
<Spin spinning={orderInfoLoading || evaluationInfoLoading}>
<PageHeaderWrapper
title={
<>
<PageHeader
style={{ padding: '0' }}
onBack={() => history.goBack()}
title={
<AvatarWrap
info={{
aloneTxt: '单',
name: orderInfo?.orderNo,
}}
/>
}
extra={(
<>
{
pageStatus === PageStatus.EDIT && (
<Button
type="primary"
icon={<FormOutlined />}
loading={submitLoading}
onClick={() => formActions.submit()}
>
修改
</Button>
)
}
</>
)}
>
<Descriptions
size="small"
column={3}
style={{
padding: '0 32px',
}}
>
<Descriptions.Item label="采购会员">{orderInfo?.createMemberName}</Descriptions.Item>
<Descriptions.Item label="下单时间" span={2}>{orderInfo?.createTime}</Descriptions.Item>
</Descriptions>
</PageHeader>
</>
}
>
<NiceForm
actions={formActions}
initialValues={{
comments: [evaluationInfo],
}}
editable={pageStatus === PageStatus.EDIT}
expressionScope={{
UploadTip: pageStatus === PageStatus.EDIT ? UploadTip : null,
beforeUpload,
}}
onSubmit={handleSubmit}
components={{
EvaluationList,
}}
effects={($, actions) => {
createEffects($, actions);
}}
schema={evaluateSchema}
/>
</PageHeaderWrapper>
</Spin>
);
};
export default ReceivedDetail;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-09-23 17:00:24
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-21 13:46:22
* @Description:
*/
import { ISchema } from '@formily/antd';
import { UPLOAD_TYPE } from '@/constants';
export const evaluateSchema: ISchema = {
type: 'object',
properties: {
comments: {
type: 'array',
'x-component': 'EvaluationList',
default: [],
items: {
type: 'object',
properties: {
LEFT_RIGHT: {
type: 'object',
'x-component': 'LeftRightLayout',
'x-component-props': {
rightProps: {
span: 2,
offset: 4,
},
},
properties: {
MEGA_LADYOUT: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
labelCol: 6,
labelAlign: 'left',
position: 'left',
},
properties: {
star: {
title: '满意程度',
required: true,
'x-component': 'Rating',
'x-component-props': {
allowHalf: false,
},
'x-rules': [
{
required: true,
message: '请选择满意程度',
},
],
},
comment: {
type: 'string',
title: '评价',
'x-component': 'TextArea',
'x-component-props': {
rows: 4,
},
'x-rules': {
max: 200,
},
},
picture: {
type: 'string',
title: '图片',
'x-component': 'Upload',
'x-component-props': {
listType: 'card',
action: '/api/file/file/upload/prefix',
data: {
fileType: UPLOAD_TYPE,
prefix: '/supplierEvaluation/',
},
beforeUpload: '{{beforeUpload}}',
accept: '.png, .jpg, .jpeg',
},
'x-mega-props': {
addonAfter: '{{UploadTip}}',
},
},
},
},
smile: {
type: 'object',
default: 1,
'x-component': 'SmilingFace',
'x-component-props': {
position: 'right',
},
},
},
},
},
},
},
},
};
\ No newline at end of file
import { useBusinessEffects } from './useBusinessEffects';
export const createEffects = (context, actions) => {
useBusinessEffects(context, actions);
};
\ No newline at end of file
import { FormEffectHooks, FormPath } from '@formily/antd';
const {
onFieldInputChange$,
onFieldValueChange$,
} = FormEffectHooks;
export const useBusinessEffects = (context, actions) => {
const {
setFieldState,
} = actions;
// 评论图片限制 4 张
onFieldInputChange$('comments.*.picture').subscribe(fieldState => {
const { name, value } = fieldState;
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `comments.${$1}.picture`
}),
state => {
state.props['x-component-props'].disabled = value.length >= 4;
}
);
});
// 评分联动
onFieldInputChange$('comments.*.star').subscribe(fieldState => {
const { name, value } = fieldState;
setFieldState(
FormPath.transform(name, /\d/, $1 => {
return `comments.${$1}.smile`
}),
state => {
state.value = value;
}
);
});
}
\ No newline at end of file
import React, { useState, useEffect } from 'react';
import {
PageHeader,
Descriptions,
Card,
Spin,
Button,
message,
} from 'antd';
import { FormOutlined } from '@ant-design/icons';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { history } from 'umi';
import { createFormActions, FormEffectHooks, FormPath } from '@formily/antd';
import { usePageStatus, PageStatus } from '@/hooks/usePageStatus';
import { PublicApi } from '@/services/api';
import { GetOrderPurchaseOrderDetailsResponse } from '@/services/OrderApi';
import { normalizeFiledata, isJSONStr } from '@/utils';
import AvatarWrap from '@/components/AvatarWrap';
import NiceForm from '@/components/NiceForm';
import { normalizeUnevaluatedList } from '../../utils';
import { evaluateSchema } from './schema';
import { createEffects } from './effects';
import EvaluationList from '../../components/EvaluationList';
import styles from './index.less';
const formActions = createFormActions();
const {
onFormInit$,
} = FormEffectHooks;
interface Unevaluated {
good: {
pic: string,
productName: string,
price: string,
purchaseCount: string,
};
star: number;
comment: string;
picture: string[];
smile: number;
};
const SentDetail: React.FC = () => {
const { orderId, id, pageStatus } = usePageStatus();
const [orderInfo, setOrderInfo] = useState<GetOrderPurchaseOrderDetailsResponse>(null);
const [orderInfoLoading, setOrderInfoLoading] = useState(false);
const [evaluationInfo, setEvaluationInfo] = useState<Unevaluated>(null);
const [evaluationInfoLoading, setEvaluationInfoLoading] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const getOrderInfo = () => {
if (!orderId) {
return;
}
setOrderInfoLoading(true);
PublicApi.getOrderPurchaseOrderDetails({
id: orderId,
}).then(res => {
if (res.code === 1000) {
setOrderInfo(res.data);
}
}).finally(() => {
setOrderInfoLoading(false);
});
};
const getEvaluationInfo = () => {
if (!id) {
return;
}
setEvaluationInfoLoading(true);
PublicApi.getMemberCommentSupplySendTradeHistoryGet({
id,
}).then(res => {
if (res.code === 1000) {
const { product } = res.data;
const productObj = isJSONStr(product) || {};
setEvaluationInfo({
good: {
pic: productObj.pic,
productName: productObj.productName,
price: productObj.price,
purchaseCount: productObj.purchaseCount,
},
star: res.data.star,
comment: res.data.comment,
picture: res.data.pics ? res.data.pics.map(item => normalizeFiledata(item)) : [],
smile: res.data.star,
});
}
}).finally(() => {
setEvaluationInfoLoading(false);
});
};
useEffect(() => {
getOrderInfo();
getEvaluationInfo();
}, []);
const handleSubmit = values => {
setSubmitLoading(true);
const payload = values.comments.map(item => {
const {
comment,
good,
picture,
star,
} = item;
return {
id,
star,
comment,
};
});
if (!payload.length) {
return;
}
PublicApi.postMemberCommentSupplySendTradeHistoryUpdate(payload[0])
.then(res => {
if (res.code === 1000) {
setTimeout(() => {
history.goBack();
}, 800);
}
})
.finally(() => {
setSubmitLoading(false);
});
};
const beforeUpload = file => {
if (file.size / 1024 < 10) {
message.warning('图片大小超过10M');
return Promise.reject();
}
};
const UploadTip = (
<span
style={{
lineHeight: '24px',
color: '#909399',
fontWeight: 400,
wordBreak: 'break-all',
position: 'relative',
top: '34px',
}}
>
支持JPG/PNG/JPEG <br />每张最大不超过 10M,尺寸不限 <br />最大数量限制 4张
</span>
);
return (
<Spin spinning={orderInfoLoading || evaluationInfoLoading}>
<PageHeaderWrapper
title={
<>
<PageHeader
style={{ padding: '0' }}
onBack={() => history.goBack()}
title={
<AvatarWrap
info={{
aloneTxt: '单',
name: orderInfo?.orderNo,
}}
/>
}
extra={(
<>
{
pageStatus === PageStatus.EDIT && (
<Button
type="primary"
icon={<FormOutlined />}
disabled={!id}
loading={submitLoading}
onClick={() => formActions.submit()}
>
修改
</Button>
)
}
</>
)}
>
<Descriptions
size="small"
column={3}
style={{
padding: '0 32px',
}}
>
<Descriptions.Item label="采购会员">{orderInfo?.createMemberName}</Descriptions.Item>
<Descriptions.Item label="下单时间" span={2}>{orderInfo?.createTime}</Descriptions.Item>
</Descriptions>
</PageHeader>
</>
}
>
<NiceForm
actions={formActions}
initialValues={{
comments: [evaluationInfo],
}}
editable={pageStatus === PageStatus.EDIT}
expressionScope={{
UploadTip: pageStatus === PageStatus.EDIT ? UploadTip : null,
beforeUpload,
}}
onSubmit={handleSubmit}
components={{
EvaluationList,
}}
effects={($, actions) => {
createEffects($, actions);
onFormInit$().subscribe(() => {
if (pageStatus === PageStatus.EDIT) {
actions.setFieldState(
'comments.*.picture',
state => {
state.visible = false;
}
);
}
});
}}
schema={evaluateSchema}
/>
</PageHeaderWrapper>
</Spin>
);
};
export default SentDetail;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-09-23 17:00:24
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-10-19 16:23:24
* @Description:
*/
import { ISchema } from '@formily/antd';
import { UPLOAD_TYPE } from '@/constants';
export const evaluateSchema: ISchema = {
type: 'object',
properties: {
comments: {
type: 'array',
'x-component': 'EvaluationList',
default: [],
items: {
type: 'object',
properties: {
LEFT_RIGHT: {
type: 'object',
'x-component': 'LeftRightLayout',
'x-component-props': {
rightProps: {
span: 2,
offset: 4,
},
},
properties: {
MEGA_LADYOUT: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
labelCol: 6,
labelAlign: 'left',
position: 'left',
},
properties: {
star: {
title: '满意程度',
required: true,
'x-component': 'Rating',
'x-component-props': {
allowHalf: false,
},
'x-rules': [
{
required: true,
message: '请选择满意程度',
},
],
},
comment: {
type: 'string',
title: '评价',
'x-component': 'TextArea',
'x-component-props': {
rows: 4,
},
'x-rules': {
max: 200,
},
},
picture: {
type: 'string',
title: '图片',
'x-component': 'Upload',
'x-component-props': {
listType: 'card',
action: '/api/file/file/upload/prefix',
data: {
fileType: UPLOAD_TYPE,
prefix: '/supplierEvaluation/',
},
beforeUpload: '{{beforeUpload}}',
accept: '.png, .jpg, .jpeg',
},
'x-mega-props': {
addonAfter: '{{UploadTip}}',
},
},
},
},
smile: {
type: 'object',
default: 1,
'x-component': 'SmilingFace',
'x-component-props': {
position: 'right',
},
},
},
},
},
},
},
},
};
\ No newline at end of file
......@@ -43,18 +43,18 @@ interface OrderInfo extends GetOrderPurchaseOrderDetailsResponse {
};
const EvaluateOrder: React.FC = () => {
const { id } = usePageStatus();
const { orderId } = usePageStatus();
const [orderInfo, setOrderInfo] = useState<OrderInfo>(null);
const [infoLoading, setInfoLoading] = useState(false);
const [submitLoading, setSubmitLoading] = useState(false);
const getOrderInfo = () => {
if (!id) {
if (!orderId) {
return;
}
setInfoLoading(true);
PublicApi.getOrderPurchaseOrderDetails({
id,
id: orderId,
}).then(res => {
if (res.code === 1000) {
const { orderProductRequests } = res.data;
......
......@@ -58,6 +58,9 @@ export const evaluateSchema: ISchema = {
'x-component-props': {
rows: 4,
},
'x-rules': {
max: 200,
},
},
picture: {
type: 'string',
......
......@@ -84,7 +84,7 @@ const Unevaluated: React.FC = () => {
align: 'center',
render: (text, record) => (
<>
<Link to={`/memberCenter/tranactionAbility/supplierEvaluation/unevaluated/evaluate?id=${record.id}`}>
<Link to={`/memberCenter/tranactionAbility/supplierEvaluation/unevaluated/evaluate?orderId=${record.id}`}>
<Button
type="link"
>
......
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