Commit 1a58d599 authored by GuanHua's avatar GuanHua
parents 4fb9f4b4 cfaadec9
......@@ -7,6 +7,11 @@ const OPEN_THEME_BUILD = process.env.NODE_ENV === 'production' ? true : false //
const config: any = {
title: '瓴犀开放平台',
// 如需写入环境变量 需在config中先写入
define: {
"process.env.SITE_ID": process.env.SITE_ID,
"process.env.BACK_GATEWAY": process.env.BACK_GATEWAY
},
// layout: {},
antd: {},
locale: {
......
......@@ -471,6 +471,39 @@ const TranactionRoute = {
// },
],
},
// 采购商会员评价管理
{
path: '/memberCenter/tranactionAbility/purchaserEvaluation',
name: 'purchaserEvaluation',
routes: [
{
path: '/memberCenter/tranactionAbility/purchaserEvaluation/unevaluated',
name: 'unevaluated',
component: '@/pages/transaction/purchaserEvaluation/unevaluated',
},
{
path: '/memberCenter/tranactionAbility/purchaserEvaluation/unevaluated/evaluate',
name: 'evaluate',
component: '@/pages/transaction/purchaserEvaluation/unevaluated/evaluate/index',
hideInMenu: true,
},
{
path: '/memberCenter/tranactionAbility/purchaserEvaluation/analysis',
name: 'analysis',
component: '@/pages/transaction/purchaserEvaluation/analysis',
},
// {
// path: '/memberCenter/tranactionAbility/purchaserEvaluation/received',
// name: 'received',
// component: '@/pages/transaction/purchaserEvaluation/received',
// },
// {
// path: '/memberCenter/tranactionAbility/purchaserEvaluation/sent',
// name: 'sent',
// component: '@/pages/transaction/purchaserEvaluation/sent',
// },
],
},
]
}
......
......@@ -19,8 +19,11 @@ const demoFetch = require('../../demo').fetchConfig
const isDemo = true
const SITE_ID = Number(process.env.SITE_ID)
const BACK_GATEWAY = process.env.BACK_GATEWAY
const remoteUrl = process.argv[2] || 'http://10.0.0.25:8100'
const remoteUrl = BACK_GATEWAY || process.argv[2] || 'http://10.0.0.25:8100'
console.log(`\n当前访问的后端url是${remoteUrl}!!!!!!`)
const axios = Axios.create({
baseURL: remoteUrl,
......
......@@ -364,14 +364,14 @@ export const MEMBER_ROLE_TYPE_SERVICE_PROVIDER = 1; // 服务提供
export const MEMBER_ROLE_TYPE_SERVICE_CONSUMER = 2; // 服务消费者
// 单据类型
export const DOC_TYPE_PURCHASE_RECEIPT = 'S001'; // 采购入库单
export const DOC_TYPE_SALES_INVOICE = 'S002'; // 销售发货单
export const DOC_TYPE_PROCESS_RECEIPT = 'S003'; // 加工入库单
export const DOC_TYPE_PROCESS_INVOICE = 'S004'; // 加工发货单
export const DOC_TYPE_RETURN_INVOICE = 'S005'; // 退货发货单
export const DOC_TYPE_RETURN_RECEIPT = 'S006'; // 退货入库单
export const DOC_TYPE_EXCHANGE_INVOICE = 'S007'; // 换货发货单
export const DOC_TYPE_EXCHANGE_RECEIPT = 'S008'; // 换货入库单
export const DOC_TYPE_PURCHASE_RECEIPT = 1; // 采购入库单
export const DOC_TYPE_SALES_INVOICE = 2; // 销售发货单
export const DOC_TYPE_PROCESS_RECEIPT = 3; // 加工入库单
export const DOC_TYPE_PROCESS_INVOICE = 4; // 加工发货单
export const DOC_TYPE_RETURN_INVOICE = 5; // 退货发货单
export const DOC_TYPE_RETURN_RECEIPT = 6; // 退货入库单
export const DOC_TYPE_EXCHANGE_INVOICE = 7; // 换货发货单
export const DOC_TYPE_EXCHANGE_RECEIPT = 8; // 换货入库单
// 单据状态
export const DOC_STATUS_UNREVIEWED = 1; // 未审核
......
/*
* @Author: LeeJiancong
* @Date: 2020-07-13 14:08:50
* @LastEditors: LeeJiancong
* @LastEditTime: 2020-09-26 17:32:14
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-09-27 11:19:28
*/
export default {
......@@ -201,6 +201,14 @@ export default {
'menu.tranactionAbility.supplierEvaluation.analysis': '评价统计',
'menu.tranactionAbility.supplierEvaluation.received': '收到的评价',
'menu.tranactionAbility.supplierEvaluation.sent': '发出的评价',
// 采购商评价
'menu.tranactionAbility.purchaserEvaluation': '采购会员评价管理',
'menu.tranactionAbility.purchaserEvaluation.unevaluated': '待评价订单',
'menu.tranactionAbility.purchaserEvaluation.evaluate': '评价',
'menu.tranactionAbility.purchaserEvaluation.analysis': '评价统计',
'menu.tranactionAbility.purchaserEvaluation.received': '收到的评价',
'menu.tranactionAbility.purchaserEvaluation.sent': '发出的评价',
//物流能力
'menu.logisticsAbility': '物流',
......
......@@ -16,19 +16,22 @@ export const baseOrderListColumns: any[] = [
return <EyePreview url={`/memberCenter/tranactionAbility/purchaseOrder/orderPreview?page_type=-1&id=${record.id}&preview=1`}>
{text}
</EyePreview>
}
},
ellipsis: true,
},
{
title: '订单摘要',
align: 'center',
dataIndex: 'orderThe',
key: 'orderThe',
ellipsis: true,
},
{
title: '供应会员',
align: 'center',
dataIndex: 'supplyMembersName',
key: 'supplyMembersName',
ellipsis: true,
},
{
title: '下单时间',
......@@ -42,6 +45,7 @@ export const baseOrderListColumns: any[] = [
align: 'center',
dataIndex: 'sumPrice',
key: 'sumPrice',
ellipsis: true,
},
{
title: '订单类型',
......
......@@ -111,6 +111,14 @@ const CommonOrderDetail:React.FC<CommonOrderDetailProps> = (props) => {
break;
}
case PURCHASE_ORDER_STATUS.READY_RETURN_DOCUMENT: {
const params = {
id: parseInt(id),
}
result = await PublicApi.postOrderFiledOrderAdd(params)
break;
}
// 确认收货
// case PURCHASE_ORDER_STATUS.READY_DELEVED_ORDER: {
// const params = {
......@@ -148,6 +156,10 @@ const CommonOrderDetail:React.FC<CommonOrderDetailProps> = (props) => {
if (page_type === PURCHASE_ORDER_STATUS.READY_CONFIRM_ELECTRON_ORDER) {
handleSubmit({})
}
if (page_type === PURCHASE_ORDER_STATUS.READY_RETURN_DOCUMENT) {
handleSubmit({})
}
}
const extraRight = formData && pageStatus !== PageStatus.PREVIEW && <div>
......
import React from 'react'
import React, { useRef } from 'react'
import { Button } from 'antd'
import { baseOrderListColumns } from '../../constant'
import { history } from 'umi'
import { PublicApi } from '@/services/api'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { PurchaseOrderInsideWorkState, SaleOrderInsideWorkState } from '@/constants'
// 业务hooks, 待新增订单
// 业务hooks
export const useSelfTable = () => {
const ref = useRef<any>({})
const [rowSelection, rowSelectionCtl] = useRowSelectionTable({customKey: 'id'})
const handleSubmit = async (record) => {
if (record.interiorState === PurchaseOrderInsideWorkState.FILLING_ORDER) {
history.push(`/memberCenter/tranactionAbility/purchaseOrder/orderPreview?id=${record.id}&preview=0&page_type=7`)
}
}
const secondColumns: any[] = baseOrderListColumns.concat([
{
title: '操作',
......@@ -11,12 +23,18 @@ export const useSelfTable = () => {
dataIndex: 'ctl',
key: 'ctl',
render: (text, record) => <>
<Button type='link'>提交审核</Button>
{
record.interiorState === PurchaseOrderInsideWorkState.FILLING_ORDER &&
<Button type='link' onClick={() => handleSubmit(record)}>归档</Button>
}
</>
}
])
return {
columns: secondColumns
columns: secondColumns,
ref,
rowSelection,
rowSelectionCtl
}
}
......@@ -32,9 +32,16 @@ const FirstApprovedOrder:React.FC<FirstApprovedOrderProps> = (props) => {
const [rowSelection, rowSelectionCtl] = useRowSelectionTable({customKey: 'id'})
const handleSubmitBatch = async () => {
await PublicApi.postOrderProcurementOrderReviewedAllTwo({
const { code } = await PublicApi.postOrderProcurementOrderReviewedAllTwo({
ids: rowSelectionCtl.selectedRowKeys
})
if (code === 1000) {
// 清空选中的值
ref.current.reload()
rowSelectionCtl.setSelectRow([])
rowSelectionCtl.setSelectedRowKeys([])
}
}
return <PageHeaderWrapper>
<Card>
......
.tabs {
:global {
.ant-tabs-nav {
margin: 0 0 24px 0;
&::before {
border-bottom: none;
}
}
}
}
\ No newline at end of file
import React from 'react';
import { Tabs, Row, Col, Button } from 'antd';
import { createFormActions } from '@formily/antd';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import MellowCard from '@/components/MellowCard';
import PolymericTable from '@/components/PolymericTable';
import { EditableColumns } from '@/components/PolymericTable/interface';
import { Pie } from '@/components/Charts';
import Mood from '@/components/Mood';
import NiceForm from '@/components/NiceForm';
import { searchSchema } from './schema';
import Shelves from '../components/Shelves';
import RecordList from '../components/RecordList';
import styles from './index.less';
const { TabPane } = Tabs;
const receivedFormActions = createFormActions();
const sentFormActions = createFormActions();
const Analysis: React.FC = () => {
const evaluateColumns: EditableColumns[] = [
{
title: ' ',
dataIndex: 'title',
align: 'center',
},
{
title: '最近7天',
dataIndex: 'last7days',
align: 'center',
},
{
title: '最近30天',
dataIndex: 'last30days',
align: 'center',
},
{
title: '最近180天',
dataIndex: 'last180days',
align: 'center',
},
{
title: '180天前',
dataIndex: 'before180days',
align: 'center',
},
];
const evaluatePie = [
{
x: `好评 30%`,
y: 100,
},
{
x: `中评 20%`,
y: 50,
},
{
x: `差评 10%`,
y: 10,
},
];
const evaluate = [
{
id: 1,
title: (<Mood type="smile" />),
last7days: 10,
last30days: 20,
last180days: 30,
before180days: 30,
},
{
id: 2,
title: (<Mood type="notBad" />),
last7days: 10,
last30days: 20,
last180days: 30,
before180days: 30,
},
{
id: 3,
title: (<Mood type="sad" />),
last7days: 10,
last30days: 20,
last180days: 30,
before180days: 30,
},
];
return (
<PageHeaderWrapper>
<MellowCard
bodyStyle={{
padding: '0 24px 24px',
}}
>
<Tabs className={styles.tabs}>
<TabPane tab="概览" key="1">
<Shelves title="评价统计">
<Row gutter={24}>
<Col flex="399px">
<Pie
hasLegend
subTitle="累计评价"
total={() => evaluatePie.reduce((pre, now) => now.y + pre, 0)}
data={evaluatePie}
height={200}
colProps={{
span: 8,
}}
colors={['#41CC9E', '#FFC400', '#EF6260']}
/>
</Col>
<Col flex="auto">
<PolymericTable
dataSource={evaluate}
columns={evaluateColumns}
loading={false}
pagination={null}
rowClassName={() => styles['record-row']}
/>
</Col>
</Row>
</Shelves>
<Shelves title="评价记录">
<RecordList list={[]} />
<div
style={{
padding: '24px 0',
textAlign: 'center',
}}
>
<Button>查看更多评论</Button>
</div>
</Shelves>
</TabPane>
<TabPane tab="收到的评价" key="2">
<NiceForm
actions={receivedFormActions}
onSubmit={values => {}}
effects={($, actions) => {
}}
schema={searchSchema}
/>
<RecordList list={[]} />
</TabPane>
<TabPane tab="发出的评价" key="3">
<NiceForm
actions={sentFormActions}
onSubmit={values => {}}
effects={($, actions) => {
}}
schema={searchSchema}
/>
<RecordList list={[]} />
</TabPane>
</Tabs>
</MellowCard>
</PageHeaderWrapper>
);
};
export default Analysis;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-09-22 20:34:49
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-09-22 20:52:53
* @Description:
*/
import { ISchema } from '@formily/antd';
export const searchSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'Mega-Layout',
'x-component-props': {
inline: true,
},
properties: {
star: {
type: 'string',
enum: [],
'x-component-props': {
placeholder: '评论星级',
allowClear: true,
style: {
width: 206,
},
},
},
'[startDate, endDate]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '交易时间',
allowClear: true,
style: {
width: 206,
},
},
},
name: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
align: 'flex-left',
advanced: false,
},
},
},
},
},
};
\ No newline at end of file
import React from 'react';
import {
Row,
Col,
Button,
} from 'antd';
import styled from 'styled-components';
import {
SchemaForm,
SchemaField,
SchemaMarkupField as Field
} from '@formily/antd';
import { ArrayList } from '@formily/react-shared-components';
import { toArr, isFn, FormPath } from '@formily/shared';
import SmilingFace from '@/components/NiceForm/components/SmilingFace';
const ArrayComponents = {
CircleButton: props => <Button {...props} />,
TextButton: props => <Button text {...props} />,
AdditionIcon: () => <div>+Add</div>,
RemoveIcon: () => <div>Remove</div>,
MoveDownIcon: () => <div>Down</div>,
MoveUpIcon: () => <div>Up</div>
};
const RowStyleLayout = styled(props => <div {...props} />)`
padding: 24px 64px 24px 24px;
background: #ffffff;
.ant-btn {
margin-right: 16px;
}
.ant-form-item {
display: flex;
margin-right: 16px;
margin-bottom: 16px;
}
> .ant-form-item {
margin-bottom: 0;
margin-right: 0;
}
.goodInfo {
display: flex;
align-items: align;
&-left {
flex-shrink: 0;
margin-right: 16px;
width: 100px;
height: 100px;
> img {
width: 100%;
height: 100%;
object-fit: cover;
}
}
&-right {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
}
&-title {
line-height: 14px;
margin-bottom: 18px;
font-size: 14px;
font-weight: 400;
color: #303133;
}
&-desc {
line-height: 12px;
margin-bottom: 16px;
font-size: 12px;
font-weight: 400;
color: #909399;
}
&-price {
line-height: 14px;
font-size: 14px;
font-weight: 500;
color: #303133;
}
}
.main {
position: relative;
padding-left: 24px;
> .ant-form-item {
margin-bottom: 0;
margin-right: 0;
}
::after {
content: ' ';
display: block;
position: absolute;
top: 6%;
left: 0;
bottom: 6%;
border-left: 1px dashed #EEF0F3;
}
}
`;
const EvaluationList = props => {
const { value, schema, className, editable, path, mutators } = props;
const {
renderAddition,
renderRemove,
renderMoveDown,
renderMoveUp,
renderEmpty,
renderExtraOperations,
...componentProps
} = schema.getExtendsComponentProps() || {};
return (
<ArrayList
value={value}
minItems={schema.minItems}
maxItems={schema.maxItems}
editable={editable}
components={ArrayComponents}
>
{toArr(value).map((item, index) => {
return (
<RowStyleLayout {...componentProps} key={index}>
<Row align="middle">
<Col span={8}>
<div className="goodInfo">
<div className="goodInfo-left">
<img src={item.good ? item.good.pic : ''} />
</div>
<div className="goodInfo-right">
<div className="goodInfo-title">进口头层黄牛皮荔枝纹/红色/XL</div>
<div className="goodInfo-desc">20 平方英尺</div>
<div className="goodInfo-price">¥ 400.00</div>
</div>
</div>
</Col>
<Col span={16}>
<div className="main">
<SchemaField path={FormPath.parse(path).concat(index)} />
</div>
</Col>
</Row>
</RowStyleLayout>
)
})}
</ArrayList>
)
}
EvaluationList.isFieldComponent = true;
export default EvaluationList;
\ No newline at end of file
@import '../../../../../global/styles/utils.less';
.record {
padding: 0;
margin: 0;
&-item {
padding: 14px 16px;
line-height: 14px;
display: flex;
align-items: center;
background: #FAFBFC;
color: #303133;
&-good {
width: 25%;
&-name {
line-height: 14px;
margin-bottom: 13px;
font-size: 14px;
font-weight: 400;
}
&-price {
margin-right: 16px;
font-weight: 500;
}
&-desc {
line-height: 12px;
font-weight: 400;
color: #909399;
}
}
&-extra {
width: 20%;
&-item {
display: flex;
align-items: center;
&-label {
flex: 0 0 60px;
line-height: 12px;
font-size: 12px;
font-weight: 400;
color: #909399;
}
&-control {
flex: 1;
}
&:not(:last-child) {
margin-bottom: 13px;
}
}
}
&-comment {
width: 40%;
&-main {
margin-top: 6px;
line-height: 14px;
font-weight: 400;
color: #303133;
.textOverflow();
}
}
&-actions {
flex: 1;
text-align: center;
}
&:not(:last-child) {
margin-bottom: 16px;
}
}
}
\ No newline at end of file
import React from 'react';
import { Button, Rate } from 'antd';
import styles from './index.less';
interface RecordListProps {
list: [];
};
const RecordList: React.FC<RecordListProps> = () => {
return (
<ul className={styles.record}>
<li className={styles['record-item']}>
<div className={styles['record-item-good']}>
<div className={styles['record-item-good-name']}>
进口头层黄牛皮荔枝纹/红色/XL
</div>
<div>
<span className={styles['record-item-good-price']}>¥400.00</span>
<span className={styles['record-item-good-desc']}>20 平方英尺</span>
</div>
</div>
<div className={styles['record-item-extra']}>
<div className={styles['record-item-extra-item']}>
<div className={styles['record-item-extra-item-label']}>
交易时间:
</div>
<div className={styles['record-item-extra-item-control']}>
2020-05-20 17:09
</div>
</div>
<div className={styles['record-item-extra-item']}>
<div className={styles['record-item-extra-item-label']}>
评价方:
</div>
<div className={styles['record-item-extra-item-control']}>
温州龙昌手袋有限公司
</div>
</div>
</div>
<div className={styles['record-item-comment']}>
<Rate value={2} disabled />
<div className={styles['record-item-comment-main']}>
付款准时,合作愉快。付款准时,合作愉快。付款准时,合作愉快。付款准时,合作愉快。付款准时…
</div>
</div>
<div className={styles['record-item-actions']}>
<Button type="link">查看</Button>
</div>
</li>
</ul>
);
};
export default RecordList;
\ No newline at end of file
@import '../../../../../global/styles/index.less';
.shelves {
&-title {
line-height: 14px;
padding: 12px;
position: relative;
font-size: 14px;
font-weight: 400;
color: #606266;
border-bottom: 1px solid #EEF0F3;
&::after {
content: ' ';
display: block;
width: 2px;
position: absolute;
top: 30%;
left: 0;
bottom: 30%;
background: @primary-color;
}
}
&-content {
padding: 30px 0;
}
}
\ No newline at end of file
import React from 'react';
import styles from './index.less';
interface ShelvesProps {
title?: string;
children?: React.ReactNode;
};
const Shelves: React.FC<ShelvesProps> = ({
title = '标题',
children,
}) => {
return (
<div className={styles.shelves}>
<div className={styles['shelves-title']}>{title}</div>
<div className={styles['shelves-content']}>
{children}
</div>
</div>
);
};
export default Shelves;
\ No newline at end of file
import React from 'react';
import styles from './index.less';
const SupplierEvaluation: React.FC = () => {
return (
<div>123</div>
);
};
export default SupplierEvaluation;
\ No newline at end of file
import React from 'react';
import styles from './index.less';
const Received: React.FC = () => {
return (
<div>Received</div>
);
};
export default Received;
\ No newline at end of file
import React from 'react';
import styles from './index.less';
const Sent: React.FC = () => {
return (
<div>Sent</div>
);
};
export default Sent;
\ 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 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 { normalizeFiledata } from '@/utils';
import AvatarWrap from '@/components/AvatarWrap';
import NiceForm from '@/components/NiceForm';
import { evaluateSchema } from './schema';
import { createEffects } from './effects';
import EvaluationList from '../../components/EvaluationList';
import styles from './index.less';
const formActions = createFormActions();
const EvaluateOrder: React.FC = () => {
const handleSubmit = values => {
console.log('values', 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 (
<PageHeaderWrapper
title={
<>
<PageHeader
style={{ padding: '0' }}
onBack={() => history.goBack()}
title={
<AvatarWrap
info={{
aloneTxt: '单',
name: '订单号:DPTY12'
}}
/>
}
extra={(
<>
<Button
type="primary"
icon={<FormOutlined />}
onClick={() => formActions.submit()}
>
发布
</Button>
</>
)}
>
<Descriptions
size="small"
column={3}
style={{
padding: '0 32px',
}}
>
<Descriptions.Item label="采购会员">BPTY12</Descriptions.Item>
<Descriptions.Item label="下单时间" span={2}>2020-08-25 08:49</Descriptions.Item>
</Descriptions>
</PageHeader>
</>
}
>
<NiceForm
actions={formActions}
expressionScope={{
UploadTip,
beforeUpload,
}}
onSubmit={handleSubmit}
components={{
EvaluationList,
}}
effects={($, actions) => {
createEffects($, actions);
}}
schema={evaluateSchema}
/>
</PageHeaderWrapper>
);
};
export default EvaluateOrder;
\ No newline at end of file
/*
* @Author: XieZhiXiong
* @Date: 2020-09-23 17:00:24
* @LastEditors: XieZhiXiong
* @LastEditTime: 2020-09-23 18:06:56
* @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: [
{
name: '杰尼',
age: 24,
small: 1,
star2: 0,
},
],
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,
},
},
comment: {
type: 'string',
title: '评价',
required: true,
'x-component': 'TextArea',
'x-component-props': {
rows: 4,
},
},
picture: {
type: 'string',
title: '图片',
required: true,
'x-component': 'Upload',
'x-component-props': {
listType: 'card',
action: '/api/file/upload/prefix',
data: {
fileType: UPLOAD_TYPE,
prefix: '/test/',
},
beforeUpload: '{{beforeUpload}}',
},
'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 React, { useState, useRef } from 'react';
import { Card, Badge, Button } from 'antd';
import { StandardTable } from 'god';
import { ColumnType } from 'antd/lib/table/interface';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { createFormActions } from '@formily/antd';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { useAsyncInitSelect } from '@/formSchema/effects/useAsyncInitSelect';
import { Link } from 'umi';
import EyePreview from '@/components/EyePreview';
import NiceForm from '@/components/NiceForm';
import StatusTag from '@/components/StatusTag';
import { listSearchSchema } from './schema';
import styles from './index.less';
const formActions = createFormActions();
const mock = [
{
orderNo: 'DPTY12',
abstract: '进口头层黄牛皮荔枝纹',
member: '广州白马皮具交易有限公司',
created: '2020-09-22 11:16:00',
amount: '¥ 50,000.00',
orderType: '现货采购',
outerStatusName: '已完成',
innerStatusName: '已完成',
},
{
orderNo: 'DPTY13',
abstract: '进口头层黄牛皮荔枝纹',
member: '广州白马皮具交易有限公司',
created: '2020-09-22 11:16:00',
amount: '¥ 50,000.00',
orderType: '现货采购',
outerStatusName: '已完成',
innerStatusName: '已完成',
},
];
const Unevaluated: React.FC = () => {
const ref = useRef<any>({});
const defaultColumns: ColumnType<any>[] = [
{
title: '订单号',
dataIndex: 'orderNo',
align: 'center',
render: (text, record) => (
<EyePreview
url={``}
>
{text}
</EyePreview>
),
},
{
title: '订单摘要',
dataIndex: 'abstract',
align: 'center',
},
{
title: '采购会员',
dataIndex: 'member',
align: 'center',
render: (text, record) => <>{text}</>,
},
{
title: '下单时间',
dataIndex: 'created',
align: 'center',
render: (text, record) => <>{text}</>,
},
{
title: '订单总额',
dataIndex: 'amount',
align: 'center',
},
{
title: '订单类型',
dataIndex: 'orderType',
align: 'center',
},
{
title: '外部状态',
dataIndex: 'outerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.outerStatus === value,
render: (text, record) => (
<StatusTag type="warnning" title="已完成" />
),
},
{
title: '内部状态',
dataIndex: 'innerStatusName',
align: 'center',
filters: [],
onFilter: (value, record) => record.innerStatus === value,
render: (text, record) => <Badge color="#42526E" text="已完成" />,
},
{
title: '操作',
dataIndex: 'option',
align: 'center',
render: (text, record) => (
<>
<Link to={`/memberCenter/tranactionAbility/supplierEvaluation/unevaluated/evaluate`}>
<Button
type="link"
>
评价
</Button>
</Link>
</>
),
},
];
const [columns, setColumns] = useState<any[]>(defaultColumns);
const fetchListData = (params: any) => {
return Promise.resolve({
total: 2,
data: mock,
});
};
// 初始化高级筛选选项
const fetchSelectOptions = async () => {
return {};
};
return (
<PageHeaderWrapper>
<Card>
<StandardTable
tableProps={{
rowKey: 'orderNo',
}}
columns={columns}
currentRef={ref}
fetchTableData={(params: any) => fetchListData(params)}
controlRender={
<NiceForm
actions={formActions}
onSubmit={values => ref.current.reload(values)}
effects={($, actions) => {
useStateFilterSearchLinkageEffect(
$,
actions,
'name',
FORM_FILTER_PATH,
);
useAsyncInitSelect(
['innerStatus', 'outerStatus'],
fetchSelectOptions,
);
}}
schema={listSearchSchema}
/>
}
/>
</Card>
</PageHeaderWrapper>
);
};
export default Unevaluated;
\ No newline at end of file
import { ISchema } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { UPLOAD_TYPE } from '@/constants';
export const listSearchSchema: ISchema = {
type: 'object',
properties: {
megaLayout: {
type: 'object',
'x-component': 'mega-layout',
properties: {
name: {
type: 'string',
'x-component': 'Search',
'x-component-props': {
placeholder: '搜索',
align: 'flex-left',
tip: '输入 订单号、订单摘要 进行搜索',
},
},
[FORM_FILTER_PATH]: {
type: 'object',
'x-component': 'mega-layout',
'x-component-props': {
grid: true,
full: true,
autoRow: true,
columns: 6,
},
properties: {
memberTypeId: {
type: 'string',
default: undefined,
'x-component-props': {
placeholder: '采购会员',
allowClear: true,
},
},
'[startDate, endDate]': {
type: 'string',
default: '',
'x-component': 'dateSelect',
'x-component-props': {
placeholder: '下单时间',
allowClear: true,
},
},
orderType: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '订单类型',
allowClear: true,
},
},
outerStatus: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '外部状态(全部)',
allowClear: true,
},
},
innerStatus: {
type: 'string',
default: undefined,
enum: [],
'x-component-props': {
placeholder: '内部状态(全部)',
allowClear: true,
},
},
submit: {
'x-component': 'Submit',
'x-mega-props': {
span: 1,
},
'x-component-props': {
children: '查询',
},
},
},
},
},
},
},
};
\ No newline at end of file
......@@ -109,6 +109,24 @@ const CommonOrderDetail:React.FC<CommonOrderDetailProps> = (props) => {
result = await PublicApi.postOrderConfirmShipmentOrder(params)
break;
}
// 确认全部回单
case SALE_ORDER_STATUS.CONFIRM_RETURN_ORDER: {
const params = {
id: parseInt(id)
}
result = await PublicApi.postOrderReceiptOrderConfirmedAll(params)
break;
}
// 待归档
case SALE_ORDER_STATUS.RETURN_DOCUMENT_ORDER: {
const params = {
id: parseInt(id)
}
result = await PublicApi.postOrderOfOrdersToBeFiled(params)
break;
}
}
......@@ -126,9 +144,23 @@ const CommonOrderDetail:React.FC<CommonOrderDetailProps> = (props) => {
handleSubmit()
}
const extraRight = formData && SaleOrderInsideWorkState.CONFIRM_DELIVERY_ORDER !== formData.purchaseOrderInteriorState &&
SaleOrderInsideWorkState.CONFIRM_RECEIPT !== formData.purchaseOrderInteriorState &&
<Button type='primary' onClick={startPush}>提交审核</Button>
const renderExtra = () => {
if (!formData) {
return null
}
switch(formData.purchaseOrderInteriorState) {
case SaleOrderInsideWorkState.CONFIRM_DELIVERY_ORDER: {
return <Button type='primary' onClick={startPush}>确认全部已发货</Button>
}
case SaleOrderInsideWorkState.CONFIRM_RECEIPT: {
return <Button type='primary' onClick={startPush}>确认全部已回单</Button>
}
default: {
return <Button type='primary' onClick={startPush}>提交审核</Button>
}
}
}
const detailList = [
{ label: '对应报价单号', name: 'quotationNo', span: 8, render: text => <Link to={'/'}>{text}</Link> },
{ label: '订单摘要', name: 'orderThe', span: 8 },
......@@ -147,7 +179,7 @@ const CommonOrderDetail:React.FC<CommonOrderDetailProps> = (props) => {
return formData ? (
<div>
<OrderDetailContext.Provider value={formContext}>
<OrderDetailHeader headerTitle={headerTiTle} detailList={detailList} detailData={formData} extraRight={extraRight}/>
<OrderDetailHeader headerTitle={headerTiTle} detailList={detailList} detailData={formData} extraRight={renderExtra()}/>
<OrderDetailWrapper>
<div className='gray-wrap'>
{/* 工作流进度 */}
......
......@@ -99,7 +99,7 @@ export const useSelfTable = () => {
]
const handleConfirm = async (record) => {
history.push(`/memberCenter/tranactionAbility/saleOrder/orderPreview?page_type=7&id=${record.id}&preview=0&orderDeliveryDetailsId=${record.orderDeliveryDetailsId}`)
history.push(`/memberCenter/tranactionAbility/saleOrder/orderPreview?page_type=8&id=${record.id}&preview=0&orderDeliveryDetailsId=${record.orderDeliveryDetailsId}`)
}
return {
......
......@@ -15,7 +15,7 @@ import { DatePicker } from '@formily/antd-components'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { PurchaseOrderInsideWorkState, SaleOrderInsideWorkState } from '@/constants'
// 待确认回
// 待归档订
export interface FirstApprovedOrderProps {}
......
......@@ -6,14 +6,14 @@ import { PublicApi } from '@/services/api'
import { useRowSelectionTable } from '@/hooks/useRowSelectionTable'
import { PurchaseOrderInsideWorkState, SaleOrderInsideWorkState } from '@/constants'
// 业务hooks, 待新增订单
// 业务hooks
export const useSelfTable = () => {
const ref = useRef<any>({})
const [rowSelection, rowSelectionCtl] = useRowSelectionTable({customKey: 'id'})
const handleSubmit = async (record) => {
if (record.purchaseOrderInteriorState === SaleOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER) {
history.push(`/memberCenter/tranactionAbility/saleOrder/orderPreview?id=${record.id}&preview=0&page_type=1`)
if (record.purchaseOrderInteriorState === SaleOrderInsideWorkState.FILLING_ORDER) {
history.push(`/memberCenter/tranactionAbility/saleOrder/orderPreview?id=${record.id}&preview=0&page_type=9`)
}
}
const secondColumns: any[] = baseOrderListColumns.concat([
......@@ -24,7 +24,7 @@ export const useSelfTable = () => {
key: 'ctl',
render: (text, record) => <>
{
record.purchaseOrderInteriorState === SaleOrderInsideWorkState.ONE_LEVEL_AUDIT_ORDER &&
record.purchaseOrderInteriorState === SaleOrderInsideWorkState.FILLING_ORDER &&
<Button type='link' onClick={() => handleSubmit(record)}>提交审核</Button>
}
</>
......
......@@ -33,6 +33,6 @@ const fetchInventory = (): Promise<any[]> => {
export const createEffects = (context, actions) => {
useBusinessEffects(context, actions);
useAsyncSelect('invoicesTypeId', fetchInvoicesType, ['name', 'number']);
useAsyncSelect('invoicesTypeId', fetchInvoicesType, ['name', 'id']);
useAsyncSelect('inventoryId', fetchInventory, ['name', 'id']);
};
\ No newline at end of file
......@@ -170,7 +170,6 @@ const AddBills: React.FC<{}> = (props: any) => {
,
invoicesDetailsRequests: details,
...rest,
// invoicesTypeId: 'S002',
});
productRowCtl.setSelectRow(details);
......
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