Commit 007661b7 authored by 前端-钟卫鹏's avatar 前端-钟卫鹏
parents 89b094a7 e25588a3
......@@ -18,7 +18,7 @@ const LogisticsRoute: RouterChild = {
path: '/memberCenter/logisticsAbility/logistics',
name: 'logistics',
routes: [
// 物流公司管理
// // 物流公司管理
{
path: '/memberCenter/logisticsAbility/logistics/company',
name: 'company',
......@@ -50,75 +50,75 @@ const LogisticsRoute: RouterChild = {
path: '/memberCenter/logisticsAbility/logistics/deliveryAddress',
name: 'deliveryAddress',
component: '@/pages/logistics/list/deliveryAddress'
},
},
// 发货地址-新增
{
path: '/memberCenter/logisticsAbility/logistics/deliveryAddress/add',
name: 'addDeliveryAddress',
component: '@/pages/logistics/shippingAddress/add',
hideInMenu: true
},
},
// 发货地址-编辑
{
path: '/memberCenter/logisticsAbility/logistics/deliveryAddress/edit',
name: 'editDeliveryAddress',
component: '@/pages/logistics/shippingAddress/edit',
hideInMenu: true
},
},
// 收货地址
{
path: '/memberCenter/logisticsAbility/logistics/receivingAddress',
name: 'receivingAddress',
component: '@/pages/logistics/list/receivingAddress'
},
},
// 收货地址-新增
{
path: '/memberCenter/logisticsAbility/logistics/receivingAddress/add',
name: 'addReceivingAddress',
component: '@/pages/logistics/receiptAddress/add',
hideInMenu: true
},
},
// 收货地址-编辑
{
path: '/memberCenter/logisticsAbility/logistics/receivingAddress/edit',
name: 'editReceivingAddress',
component: '@/pages/logistics/receiptAddress/edit',
hideInMenu: true
},
},
// 运费模板
{
path: '/memberCenter/logisticsAbility/logistics/template',
name: 'template',
component: '@/pages/logistics/list/template'
},
},
// 运费模板-新增
{
path: '/memberCenter/logisticsAbility/logistics/templateForm',
name: 'templateForm',
component: '@/pages/logistics/list/components/templateForm',
hideInMenu: true
},
},
// 运费模板-新增
{
path: '/memberCenter/logisticsAbility/logistics/template/add',
name: 'addTemplate',
component: '@/pages/logistics/list/components/templateForm',
hideInMenu: true
},
},
// 运费模板-编辑
{
path: '/memberCenter/logisticsAbility/logistics/template/edit',
name: 'editTemplate',
component: '@/pages/logistics/list/components/templateForm',
hideInMenu: true
},
},
// 运费模板-详情
{
path: '/memberCenter/logisticsAbility/logistics/template/detail',
name: 'templateDetail',
component: '@/pages/logistics/list/components/templateForm',
hideInMenu: true
},
},
]
},
......@@ -139,7 +139,7 @@ const LogisticsRoute: RouterChild = {
name: 'orderSubmitDeatil',
component: '@/pages/logistics/components/orderSearchDetail',
hideInMenu: true
},
},
// 待提交物流单
{
path: '/memberCenter/logisticsAbility/logisticsSubmit/toOrderSumitList',
......@@ -159,17 +159,17 @@ const LogisticsRoute: RouterChild = {
name: 'addToOrderSubmit',
component: '@/pages/logistics/logisticsSubmit/detail',
hideInMenu: true
},
},
// 待提交物流单-编辑
{
path: '/memberCenter/logisticsAbility/logisticsSubmit/toOrderSumitList/edit',
name: 'editToOrderSubmit',
component: '@/pages/logistics/logisticsSubmit/toOrderSubmitDetail',
hideInMenu: true
},
},
]
},
// 物流单处理
{
path: '/memberCenter/logisticsAbility/logisticsResult',
......@@ -213,4 +213,4 @@ const LogisticsRoute: RouterChild = {
]
}
export default LogisticsRoute
\ No newline at end of file
export default LogisticsRoute
......@@ -17,15 +17,15 @@
"build:dev": "pm2 start scripts/devServer.js",
"build:clean": "cross-env NODE_OPTIONS=--max_old_space_size=4096 umi build",
"build:scm": "cross-env SITE_ID=1 BACK_GATEWAY=http://lingxi-scm.wg.shushangyun.com USE_ROUTE_CONFIG=false SOCKET_URL=ws://lingxi-scm.wg.shushangyun.com yarn build",
"build:10": "cross-env SITE_ID=1 BACK_GATEWAY=http://10.0.0.10:8100 USE_ROUTE_CONFIG=false SOCKET_URL=ws://10.0.0.10:8100 yarn build",
"build:10": "cross-env SITE_ID=1 BACK_GATEWAY=http://10.0.0.10:8100 USE_ROUTE_CONFIG=false SOCKET_URL=ws://10.0.0.10 yarn build",
"postinstall": "umi generate tmp",
"prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'",
"test": "umi-test",
"test:coverage": "umi-test --coverage",
"start:cross": "cross-env SITE_ID=352 USE_ROUTE_CONFIG=false SOCKET_URL=ws://10.0.0.25:9400 yarn start",
"start:cross": "cross-env SITE_ID=352 USE_ROUTE_CONFIG=false SOCKET_URL=ws://10.0.0.25 yarn start",
"start:scm": "cross-env SITE_ID=1 BACK_GATEWAY=http://lingxi-scm.wg.shushangyun.com USE_ROUTE_CONFIG=false SOCKET_URL=ws://lingxi-scm.wg.shushangyun.com yarn start",
"start:url": "cross-env SITE_ID=1 BACK_GATEWAY=http://lingxi-all.wg.shushangyun.com USE_ROUTE_CONFIG=true SOCKET_URL=ws://lingxi-all.wg.shushangyun.com yarn start",
"start:10": "cross-env SITE_ID=1 BACK_GATEWAY=http://10.0.0.10:8100 USE_ROUTE_CONFIG=true SOCKET_URL=ws://10.0.0.10:8100 yarn start"
"start:10": "cross-env SITE_ID=1 BACK_GATEWAY=http://10.0.0.10:8100 USE_ROUTE_CONFIG=true SOCKET_URL=ws://10.0.0.10 yarn start"
},
"lint-staged": {
"*.{js,jsx,less,md,json}": [
......
export const NOT_CHANGE_VALUE = 'hello, world'
// socket的链接地址, 默认会使用后端接口网关地址
export const SOCKET_URL = process.env.SOCKET_URL?.replace('http|https', 'ws') || process.env.BACK_GATEWAY?.replace('http|https', 'ws') || "ws://10.0.0.25:9400"
export const SOCKET_URL = process.env.SOCKET_URL?.replace('http|https', 'ws') || process.env.BACK_GATEWAY?.replace('http|https', 'ws')
console.log(SOCKET_URL);
export const MALL_TYPE = {
......
......@@ -16,6 +16,7 @@ import { SOCKET_URL } from '@/constants';
// layout: 'sidemenu' | 'topmenu';
// }
const NOT_READ_MESSAGE = 1;
const GlobalHeaderRight: React.FC<{}> = (props) => {
// const { theme, layout } = props;
const [message, setMessage] = useState<number>(0);
......@@ -30,18 +31,21 @@ const GlobalHeaderRight: React.FC<{}> = (props) => {
const ws = useRef<WebSocket | null>(null);
const webSocketInit = useCallback(() => {
console.log(ws.current)
if ((!ws.current || ws.current.readyState === 3) && userInfo) {
ws.current = new WebSocket(`${SOCKET_URL}/report/websocket?memberId=${userInfo.memberId}&roleId=${userInfo.memberRoleId}`);
if (SOCKET_URL && (!ws.current || ws.current.readyState === 3) && userInfo) {
const url = `${SOCKET_URL}/report/websocket?memberId=${userInfo.memberId}&roleId=${userInfo.memberRoleId}&token=${userInfo.token}&source=${1}`;
ws.current = new WebSocket(url);
ws.current.onopen = (e) => {
console.log(e)
}
ws.current.onmessage = (e) => {
console.log(e)
setMessage(e.data)
if(e.data.type === NOT_READ_MESSAGE) {
setMessage(e.data.data);
}
};
ws.current.onclose = (e) => {
console.log("关闭连接")
}
}
ws.current.onerror = (e) => {
console.log("socket 出错")
}
......
......@@ -9,6 +9,7 @@ import { topBarConfig, topAdvertConfig, headerConfig, mainNavConfig, bannerAdver
import Loading from '../components/Loading'
import { menuData } from './defaultMenu'
import { PublicApi } from '@/services/api'
import { getAuth } from '@/utils/auth'
import styles from './index.less'
interface ChannelPreviewPropsType {
......@@ -30,6 +31,7 @@ const TemplateList = ['science']
const ChannelPreview: React.FC<ChannelPreviewPropsType> = (props) => {
const { query: { id, template } } = props.location
const userInfo = getAuth() || {}
const [loading, setLoading] = useState<boolean>(true)
const [theme, setTheme] = useState<string>('theme-channel-science')
const [componentConfigs, setComponentConfigs] = useState({})
......@@ -47,7 +49,8 @@ const ChannelPreview: React.FC<ChannelPreviewPropsType> = (props) => {
return new Promise((resolve) => {
const params: any = {
templateId: id,
type: 1
type: 1,
memberId: userInfo.memberId
}
PublicApi.getTemplateChannelFindAdvertsByType(params).then(res => {
......@@ -64,7 +67,8 @@ const ChannelPreview: React.FC<ChannelPreviewPropsType> = (props) => {
return new Promise((resolve) => {
const params: any = {
templateId: id,
type: 2
type: 2,
memberId: userInfo.memberId
}
PublicApi.getTemplateChannelFindAdvertsByType(params).then(res => {
......@@ -82,7 +86,10 @@ const ChannelPreview: React.FC<ChannelPreviewPropsType> = (props) => {
*/
const fetchFirstCategory = () => {
return new Promise((resolve) => {
PublicApi.getTemplateChannelFindAllFirstCategory().then(res => {
const params: any = {
memberId: userInfo.memberId
}
PublicApi.getTemplateChannelFindAllFirstCategory(params).then(res => {
if (res.code === 1000) {
resolve(res.data)
}
......@@ -97,7 +104,8 @@ const ChannelPreview: React.FC<ChannelPreviewPropsType> = (props) => {
return new Promise((resolve) => {
const param: any = {
templateId: id,
categoryId
categoryId,
memberId: userInfo.memberId
}
PublicApi.getTemplateChannelFindFirstCategoryDetail(param).then(res => {
......@@ -112,7 +120,10 @@ const ChannelPreview: React.FC<ChannelPreviewPropsType> = (props) => {
*/
const fetchShopInfo = () => {
return new Promise((resolve) => {
PublicApi.getTemplateChannelFindChannel().then(res => {
const params: any = {
memberId: userInfo.memberId
}
PublicApi.getTemplateChannelFindChannel(params).then(res => {
if (res.code === 1000) {
resolve(res.data)
}
......
......@@ -269,15 +269,26 @@ const Add: React.FC<{}> = () => {
}
setSubmitLoading(true);
const detailList = someLists.map((item) => {
const orderData = values.source === 1
? {
orderId: item.orderId,
orderDetailId: item.fullId,
orderNo: item.orderNo,
productId: item.commodityId,
purchaseCount: item.orderTotal, // 订单数量
surplusProcessNum: item.restTotal, // 剩余加工数量
}
: {
productId: item.id,
purchaseCount:null,
surplusProcessNum:null,
}
return {
orederNo: item.orderNo, // 如果是商品加工,那么他没有订单号
productId: item.id, // skuid
...orderData,
productName: item.name,
category: item.customerCategoryName,
brand: item.brandName,
unit: item.unitName,
purchaseCount:null,
surplusProcessNum:null,
processNum: item.processNum || 0,
processPrice: item.processUnitPrice || 0,
processTotalPrice: item.processTotalPrice,
......
......@@ -52,20 +52,22 @@ const ProcessProducts = ({visible, cancel, rowSelection, ...restProps}) => {
(item) => {
return {
orderNo: record.orderNo,
orderId: record.id, // 订单id
// orderDetailId: item.id, // 订单商品唯一id
commodityId: item.productId, // 商品id
id: item.productId,
id: item.productId, // sku id
name: item.productName,
customerCategoryName: item.category,
brandName: item.brand,
unitName: item.unit,
orderTotal: item.purchaseCount,
orderTotal: item.purchaseCount, // 采购数量
restTotal: item.purchaseCount - (item.processNum || 0),
processNum: '',
processUnitPrice: '',
processTotalPrice: '',
price: item.price, //单价,
hasProcessNum: item.processNum || 0,
fullId: item.id
fullId: item.id, //订单商品唯一id
}
}
)
......
import React, { useRef, ReactNode, useEffect } from 'react';
import { StandardTable } from 'god';
import { Row, Col, Space, Button, Card } from 'antd';
import NiceForm from '@/components/NiceForm';
import { createFormActions } from '@formily/antd';
import { FORM_FILTER_PATH } from '@/formSchema/const';
import { useStateFilterSearchLinkageEffect } from '@/formSchema/effects/useFilterSearch';
import { LogisticsOrderSubmitSearchSchema, LogisticsOrderToBeSubmitSearchSchema, LogisticsOrderProcessingSearchSchema, LogisticsOrderToBeConfirmedSearchSchema, None } from './schema';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
interface tableListParams {
columns?: any, // 表头
reloadRef?: any, // 处理刷新
fetchData?: Function, // 列表数据
schema?: boolean, // 是否显示schema 搜索
schemaType?: 'LogisticsOrderSubmitSearchSchema' | 'LogisticsOrderToBeSubmitSearchSchema' | 'LogisticsOrderProcessingSearchSchema' | 'LogisticsOrderToBeConfirmedSearchSchema' | 'none'
}
const formActions = createFormActions();
const LogisticsTableList: React.FC<tableListParams> = (props) => {
const { columns, reloadRef, fetchData, schema = false, schemaType = 'none' } = props;
const ref = useRef<any>({});
const controllerBtns: ReactNode = <Row>
<Col>
<Button type='primary'>新建</Button>
</Col>
</Row>
const schemaRender = () => {
switch (schemaType) {
case 'LogisticsOrderSubmitSearchSchema': {
return LogisticsOrderSubmitSearchSchema
}
case 'LogisticsOrderToBeSubmitSearchSchema': {
return LogisticsOrderToBeSubmitSearchSchema
}
case 'LogisticsOrderProcessingSearchSchema': {
return LogisticsOrderProcessingSearchSchema
}
case 'LogisticsOrderToBeConfirmedSearchSchema': {
return LogisticsOrderToBeConfirmedSearchSchema
}
case 'none': {
return None
}
}
}
useEffect(() => {
if (reloadRef) {
const userAction = {
reload: () => ref.current.reload()
}
if (reloadRef && typeof reloadRef === 'function') {
reloadRef(userAction);
}
if (reloadRef && typeof reloadRef !== 'function') {
reloadRef.current = userAction;
}
}
})
return (
<PageHeaderWrapper>
<Card >
<StandardTable
columns={columns}
currentRef={ref}
tableProps={{ rowKey: 'id' }}
fetchTableData={(params: any) => fetchData(params)}
controlRender={
<NiceForm
actions={formActions}
effects={($, actions) => {
useStateFilterSearchLinkageEffect($, actions, 'logisticsOrderNo', FORM_FILTER_PATH)
}}
expressionScope={{ controllerBtns }}
schema={schemaRender()}
/>
}
/>
</Card>
</PageHeaderWrapper>
)
}
export default LogisticsTableList
......@@ -83,8 +83,8 @@ const orderSearchList: React.FC<listProps> = (props) => {
})
/**
* @description: 先查询参数再 分页参数
* @param {type}
* @return:
* @param {type}
* @return:
*/
const fetchData = (params: any) => {
console.log('参数', params)
......@@ -115,9 +115,9 @@ const orderSearchList: React.FC<listProps> = (props) => {
}
/**
* @description:
* @param {type}
* @return:
* @description:
* @param {type}
* @return:
*/
useEffect(() => {
console.log(searchForm)
......@@ -189,8 +189,8 @@ const orderSearchList: React.FC<listProps> = (props) => {
{
title: ' 收货方',
align: 'left',
dataIndex: 'receiverName',
key: 'receiverName'
dataIndex: 'receiverMemberName',
key: 'receiverMemberName'
},
{
title: '总箱数',
......@@ -265,8 +265,8 @@ const orderSearchList: React.FC<listProps> = (props) => {
/**
* @description: 直接改变
* @param {type}
* @return:
* @param {type}
* @return:
*/
const handleChange = (key: any, val: any) => {
let obj = {}
......@@ -366,4 +366,4 @@ orderSearchList.defaultProps = {
type: '1',
title: '123'
}
export default orderSearchList
\ No newline at end of file
export default orderSearchList
This diff is collapsed.
......@@ -20,12 +20,13 @@ const layout: any = {
labelAlign: "left"
};
export interface interfaceinfo {
parmas?: any,
handleRevise?: Function
set?: any,
currentRef?: any,
onGet?: Function
}
const BasicInfo: React.FC<interfaceinfo> = (props) => {
const { parmas, handleRevise } = props;
const { set, currentRef, onGet } = props;
const [listcompany, setlistcompany] = useState<any>([]);//物流服务商
const [shipperaddress, setshipperaddress] = useState<any>([]);//发货地址
const [shippingvisible, setshippingvisible] = useState<boolean>(false);
......@@ -109,21 +110,50 @@ const BasicInfo: React.FC<interfaceinfo> = (props) => {
]
// 确定
const handleShipping = (type:any, values:any, param:any) => {
console.log(values, 'handleShipping')
handleRevise(values[0], 1);
form.setFieldsValue({
shipmentOrderCode: values[0].invoicesNo
})
onGet(values[0], 2);
setshippingvisible(false);
}
const handleInvoices = (type:any, values:any, param:any) => {
console.log(values, 'handleInvoices')
handleRevise(values[0], 2);
form.setFieldsValue({
invoicesNo: values[0].orderNo
})
onGet(values[0], 3);
setinvoicesvisible(false);
}
useEffect(() => {
currentRef.current = {
get: () => new Promise((resolve: any) => {
form.validateFields().then(res => {
resolve({
state: true,
name: 'basicInfo',
data: {
digest: res.digest,
companyId: res.companyId,
shipmentOrderCode: res.shipmentOrderCode,
invoicesNo: res.invoicesNo,
shipperAddressId: res.shipperAddressId,
companyName: set.companyName,
shipperFullAddress: set.shipperFullAddress,
receiverMemberId: set.receiverMemberId,
receiverMemberName: set.receiverMemberName,
receiverFullAddress: set.receiverFullAddress,
receiverName: set.receiverName,
receiverPhone: set.receiverPhone,
}
})
}).catch(error => {
console.log(error)
})
})
}
})
return (
<>
<Form
......@@ -134,7 +164,7 @@ const BasicInfo: React.FC<interfaceinfo> = (props) => {
<Input />
</Form.Item>
<Form.Item label="物流服务商" name="companyId" rules={[{ required: true, message: '请选择流服务商' }]}>
<Select allowClear>
<Select allowClear onChange={(value, option) => onGet(option, 1)}>
{
listcompany.map((item: any, index: number) => (
<Option key={item.id} value={item.id}>{item.name}</Option>
......@@ -144,20 +174,20 @@ const BasicInfo: React.FC<interfaceinfo> = (props) => {
</Form.Item>
<Form.Item label="物流单号" name='receiverName1'><span></span></Form.Item>
<Form.Item label='对应发货单号' name='shipmentOrderCode'>
<Search value={parmas.shipmentOrderCode || undefined} readOnly enterButton={<><LinkOutlined /> 选择</>} onSearch={()=>setshippingvisible(true)} />
<Search readOnly enterButton={<><LinkOutlined /> 选择</>} onSearch={()=>setshippingvisible(true)} />
{/* <Button type='link'>查看单号详情</Button> */}
</Form.Item>
<Form.Item label='对应订单号/售后单' name='invoicesNo'>
<Search value={parmas.invoicesNo || undefined} readOnly enterButton={<><LinkOutlined /> 选择</>} onSearch={()=>setinvoicesvisible(true)} />
<Search readOnly enterButton={<><LinkOutlined /> 选择</>} onSearch={()=>setinvoicesvisible(true)} />
{/* <Button type='link'>查看单号详情</Button> */}
</Form.Item>
<Form.Item label="收货方" name='receiverName'><span>{parmas.receiverName}</span></Form.Item>
<Form.Item label="收货方" name='receiverName'><span>{set.receiverName}</span></Form.Item>
<Form.Item label="收货地址" name='receiverFullAddress'>
<div style={{ lineHeight: '36px' }}>{parmas.memberName}/{parmas.phone}</div>
<div>{parmas.receiverFullAddress}</div>
<div style={{ lineHeight: '36px' }}>{set.receiverName}/{set.receiverPhone}</div>
<div>{set.receiverFullAddress}</div>
</Form.Item>
<Form.Item label="发货地址" name="shipperAddressId">
<Select allowClear>
<Select allowClear onChange={(value, option) => onGet(option, 4)}>
{
shipperaddress.map((item: any, index: number) => (
<Option key={item.id} value={item.id}>{item.fullAddress}</Option>
......@@ -168,23 +198,23 @@ const BasicInfo: React.FC<interfaceinfo> = (props) => {
<Form.Item label="单据时间" name='voucherTime'><span></span></Form.Item>
<Form.Item label="外部状态" name='externalState'><span></span></Form.Item>
</Form>
<ShippingModal
<ShippingModal
title='选择发货单'
columns={shippingColumns}
type={2}
onOk={(type, values, param) => handleShipping(type, values, param)}
dialogVisible={shippingvisible}
onCancel={() => setshippingvisible(false)}
onCancel={() => setshippingvisible(false)}
/>
<InvoicesModal
<InvoicesModal
title='选择订单'
columns={invoicesColumns}
type={1}
onOk={(type, values, param) => handleInvoices(type, values, param)}
dialogVisible={invoicesvisible}
onCancel={() => setinvoicesvisible(false)}
onCancel={() => setinvoicesvisible(false)}
/>
</>
)
}
export default BasicInfo;
\ No newline at end of file
export default BasicInfo;
......@@ -4,7 +4,12 @@ import { ColumnType } from 'antd/lib/table/interface';
import { PlusOutlined } from '@ant-design/icons';
import ModalTable from '@/components/ModalTable'
const AddGoods: React.FC<{}> = () => {
interface goodsParamsProps {
currentRef?: any,
set?: any
}
const AddGoods: React.FC<goodsParamsProps> = (props) => {
const columns: ColumnType<any>[] = [
{
title: 'ID',
......@@ -95,7 +100,7 @@ const AddGoods: React.FC<{}> = () => {
/**获取商品列表 */
const fetchProductList = (params:any) => {
return new Promise(resolve => {
})
}
......@@ -117,4 +122,4 @@ const AddGoods: React.FC<{}> = () => {
</>
)
}
export default AddGoods;
\ No newline at end of file
export default AddGoods;
......@@ -3,7 +3,7 @@
* @Date: 2020-11-06
* @Author: HJX
*/
import React, { useState } from 'react';
import React, { useState, useRef } from 'react';
import { Button, Card, Tabs } from 'antd';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import ReturnEle from '@/components/ReturnEle';
......@@ -14,6 +14,7 @@ import Goods from './components/goods';//物流单明细
const { TabPane } = Tabs
const AddEditLogistics: React.FC<{}> = () => {
const basic = useRef<any>();
// 用于提交的
const [parmas, setParmas] = useState<any>({
digest: '',//单据摘要
......@@ -31,33 +32,36 @@ const AddEditLogistics: React.FC<{}> = () => {
detailList: [],//物流单明细列表 ,LogisticsOrderDetailRequest
})
const [data, setData] = useState<any>({})
// 调用修改Fn
const handleRevise = (value: any, index: number) => {
console.log(value, '传过来的数据')
// 提交数据
const handleSubmit = async () => {
const basicRef = await basic.current.get();
if (basicRef.state) {
console.log(basicRef.data);
}
}
const getBasicInfo = (value: any, index: number) => {
const data = { ...parmas };
if (index === 1) {
data.invoicesNo = value.orderNo;//对应单据编号
data.receiverAddressId = value.deliveryAddresId;//收货方id
data.shipmentOrderId = value.id;//发货单id
data.companyName = value.children
} else if (index === 2) {
data.shipmentOrderCode = value.invoicesNo;//发货单号
data.phone = value.phone;
data.receiverPhone = value.phone;
data.receiverName = value.receiverName;//收货方名称
data.receiverFullAddress = value.fullAddress;
data.memberName = value.memberName;
setParmas(data)
} else if (index === 2 && !data.invoicesNo) {
data.phone = value.phone;
data.receiverMemberName = value.memberName;
data.invoicesId = value.id
} else if (index === 3 && !data.invoicesNo) {
data.receiverPhone = value.phone;
data.receiverName = value.receiverName;//收货方名称
data.receiverFullAddress = value.fullAddress;
data.memberName = value.memberName;
setParmas(data)
data.receiverMemberName = value.memberName;
data.invoicesId = value.id
} else {
data.shipperFullAddress = value.children
}
}
// 提交数据
const handleSubmit = () => {
console.log('提交数据');
setParmas(data)
}
return (
......@@ -70,12 +74,15 @@ const AddEditLogistics: React.FC<{}> = () => {
<Tabs type="card">
<TabPane key='tab-1' tab='基本信息'>
<BasicInfo
parmas={parmas}
handleRevise={handleRevise}
currentRef={basic}
set={parmas}
onGet={getBasicInfo}
/>
</TabPane>
<TabPane key='tab-2' tab='物流单明细'>
<Goods />
<Goods
set={parmas}
/>
</TabPane>
<TabPane key='tab-3' tab='运费'></TabPane>
<TabPane key='tab-4' tab='流转记录'>
......@@ -87,4 +94,4 @@ const AddEditLogistics: React.FC<{}> = () => {
)
}
export default AddEditLogistics
\ No newline at end of file
export default AddEditLogistics
......@@ -518,6 +518,7 @@ const CommodityDetail = (props) => {
shopId: storeId,
memberRoleId: commodityDetail.memberRoleId
}
PublicApi.postOrderDirectPayment(param).then(res => {
if (res.code === 1000) {
message.destroy()
......
......@@ -30,14 +30,14 @@ const Category: React.FC<CategoryPropsType> = (props) => {
const [initSelectAttributeList, setInitSelectAttributeList] = useState<any>([])
useEffect(() => {
console.log(JSON.stringify(filterList))
if (isEmpty(filterList)) {
setSelectedKeys([])
setLastCategoryId(null)
setSelectAttrbuteList([])
} else {
const initKeys = []
// let initAttrKeys = []
let attrInitKeys = []
for (const item of filterList) {
if (item.type === FILTER_TYPE.category) {
initKeys.push(String(item.key))
......@@ -45,9 +45,15 @@ const Category: React.FC<CategoryPropsType> = (props) => {
initKeys.push(String(item.key))
}
if (item.type === FILTER_TYPE.attribute) {
setInitSelectAttributeList(item.key)
attrInitKeys = item.key
}
}
setInitSelectAttributeList(attrInitKeys)
if(isEmpty(attrInitKeys)) {
setSelectAttrbuteList([])
}
setSelectedKeys(initKeys)
}
}, [filterList])
......@@ -197,15 +203,10 @@ const Category: React.FC<CategoryPropsType> = (props) => {
setLastCategoryId(selectedKeys[0])
}
} else {
setLastCategoryId(null)
setAttributeList([])
if(filterList.some(item => item.type === FILTER_TYPE.attribute)) {
onFilter({
type: FILTER_TYPE.attribute,
key: null,
title: ``
})
}
initAttribute()
}
if(selectedKeys.length === 0) {
initAttribute()
}
switch(layoutType) {
case LAYOUT_TYPE.mall:
......@@ -226,6 +227,18 @@ const Category: React.FC<CategoryPropsType> = (props) => {
}
const initAttribute = () => {
setLastCategoryId(null)
setAttributeList([])
if(filterList.some(item => item.type === FILTER_TYPE.attribute)) {
onFilter({
type: FILTER_TYPE.attribute,
key: null,
title: ``
})
}
}
const handleExpand = (expandedKeys) => {
setExpandedKeys(expandedKeys)
}
......
......@@ -56,7 +56,7 @@ const SideNav: React.FC<SideNavPropsType> = (props) => {
<div className="side_nav_list_item" onClick={() => linkToPurchaseOrder()}>
<MyIcon type="icon-gouwuche" />
</div>
<div className="side_nav_list_item">
<div className="side_nav_list_item" onClick={() => history.push('/memberCenter/systemSetting/message')}>
<MyIcon type="icon-xiaoxi" />
</div>
<div className="side_nav_list_item">
......@@ -72,4 +72,4 @@ const SideNav: React.FC<SideNavPropsType> = (props) => {
)
}
export default SideNav
\ No newline at end of file
export default SideNav
......@@ -394,45 +394,72 @@ const Details: React.FC<parmas> = (props) => {
}
>
<div className={style.item_wrap}>
{
<Tabs>
<TabPane tab="外部流转" key="1">
<Steps
style={{ padding: '20px 0' }}
progressDot
current={Number(data.externalState - 1)}
>
{detailData.externalStateStep.items.map((item, index) => {
return (
<Step
key={index}
title={item.title}
description={item.desc}
/>
);
})}
</Steps>
</TabPane>
<TabPane tab="内部流转" key="2">
<Steps
style={{ padding: '20px 0' }}
progressDot
current={Number(data.interiorState - 1)}
>
{detailData.interiorStateStep.items.map((item, index) => {
return (
<Step
key={index}
title={item.title}
description={item.desc}
/>
);
})}
</Steps>
</TabPane>
</Tabs>
}
<Tabs>
{
Object.keys(data).length > 0 &&
<>
{type === 'quote' ?
<TabPane tab="外部流转" key="1">
<Steps
style={{ padding: '20px 0' }}
progressDot
current={data.externalState - 1}
>
{Object.keys(data).length > 0 && data.externalRequisitionFormResponses.map((item, index) => {
return (
<Step
key={index}
title={item.roleName}
description={item.operation}
status={item.isExecute ? 'finish' : 'wait'}
/>
);
})}
</Steps>
</TabPane>
:
<>
<TabPane tab="外部流转" key="1">
<Steps
style={{ padding: '20px 0' }}
progressDot
current={data.externalState - 1}
>
{Object.keys(data).length > 0 && data.externalInquiryListStateResponses.map((item, index) => {
return (
<Step
key={index}
title={item.roleName}
description={item.operationalProcess}
status={item.isExecute ? 'finish' : 'wait'}
/>
);
})}
</Steps>
</TabPane>
<TabPane tab="内部流转" key="2">
<Steps
style={{ padding: '20px 0' }}
progressDot
current={Number(data.interiorState - 1)}
>
{Object.keys(data).length > 0 && data.interiorRequisitionFormStateResponses.map((item, index) => {
return (
<Step
key={index}
title={item.roleName}
description={item.operationalProcess}
status={item.isExecute ? 'finish' : 'wait'}
/>
);
})}
</Steps>
</TabPane>
</>
}
</>
}
</Tabs>
</div>
<div className={style.item_wrap}>
<div className={style.mainCol_title} style={view === 2 ? { paddingBottom: '0px' } : { paddingBottom: '24px' }}>询价商品</div>
......@@ -515,12 +542,20 @@ const Details: React.FC<parmas> = (props) => {
</div>
<div className={style.item_wrap}>
<Tabs>
<TabPane tab="外部流转记录" key="1">
<Table columns={flowRecord.external} rowKey='id' pagination={false} dataSource={view === 2 ? data.externalRequisitionFormResponses : data.externalInquiryListLogResponses} />
</TabPane>
<TabPane tab="内部流转记录" key="2">
<Table columns={flowRecord.interior} rowKey='id' pagination={false} dataSource={view === 2 ? data.interiorQuotationLogResponses : data.interiorInquiryListLogResponses} />
</TabPane>
{
type === 'quote' ?
<TabPane tab="外部流转记录" key="1">
<Table columns={flowRecord.external} rowKey='id' pagination={false} dataSource={view === 2 ? data.externalRequisitionFormResponses : data.externalInquiryListLogResponses} />
</TabPane> :
<>
<TabPane tab="外部流转记录" key="1">
<Table columns={flowRecord.external} rowKey='id' pagination={false} dataSource={view === 2 ? data.externalRequisitionFormResponses : data.externalInquiryListLogResponses} />
</TabPane>
<TabPane tab="内部流转记录" key="2">
<Table columns={flowRecord.interior} rowKey='id' pagination={false} dataSource={view === 2 ? data.interiorQuotationLogResponses : data.interiorInquiryListLogResponses} />
</TabPane>
</>
}
</Tabs>
</div>
<AuditModal
......@@ -534,4 +569,4 @@ const Details: React.FC<parmas> = (props) => {
)
}
export default Details
\ No newline at end of file
export default Details
......@@ -5,8 +5,8 @@ import TranactionRoute from 'config/routes/tranactionRoute'
/**
* @description: 待审核询价单
* @param {type}
* @return {type}
* @param {type}
* @return {type}
*/
export const pendingReviewSchema: ISchema = {
type: 'object',
......
......@@ -18,38 +18,10 @@ const FlowRecord: React.FC<parmas> = (props) => {
const format = (text) => {
return <>{moment(text).format("YYYY-MM-DD HH:mm:ss")}</>
}
/**
* @description: 外部流转记录
* @param {type}
* @return {type}
*/
const externalTextState = (text) => {
let name = ''
editData.externalInquiryListStateResponses.forEach(element => {
if (element.state === text) {
name = element.operationalProcess
}
})
return <>{name}</>
}
/**
* @description: 内部流转记录
* @param {type}
* @return {type}
*/
const interiorTextState = (text) => {
let name = ''
editData.interiorInquiryListLogResponses.forEach(element => {
if (element.state === text) {
name = element.operationalProcess
}
})
return <>{name}</>
}
const outerColumns: EditableColumns[] = [{
title: '序号',
dataIndex: 'inquiryListId',
dataIndex: 'id',
}, {
title: '操作角色',
dataIndex: 'roleName',
......@@ -70,7 +42,7 @@ const FlowRecord: React.FC<parmas> = (props) => {
}]
const insideColumns: EditableColumns[] = [{
title: '序号',
dataIndex: 'inquiryListId',
dataIndex: 'id',
}, {
title: '操作人',
dataIndex: 'roleName',
......
import React, { useState, useEffect } from 'react';
import style from './index.less';
import { history } from 'umi';
import { Button, Card, Tabs, Steps, Table } from 'antd';
import { Button, Tabs, Steps, Table } from 'antd';
import { ColumnType } from 'antd/lib/table/interface';
import { StopOutlined, CheckSquareOutlined, LinkOutlined } from '@ant-design/icons'
import { CheckSquareOutlined, LinkOutlined } from '@ant-design/icons'
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { quoteOrderInternalState, inquiryQuoteOuterState } from '../../common/tableStatusList';
import AuditModal from '../components/auditModel';
import moment from 'moment';
import { PublicApi } from '@/services/api';
......@@ -41,59 +40,7 @@ const Details: React.FC<parmas> = (props) => {
const format = (text) => {
return <>{moment(text).format("YYYY-MM-DD HH:mm:ss")}</>
}
// steps 切换
const [detailData, setDetailData] = useState<any>({
externalStateStep: {
current: 0,
title: '外部流转',
items: [
{
title: '采购商',
desc: '提交询价单',
},
{
title: '供应商',
desc: '提交报价单',
},
{
title: '采购商',
desc: '确认报价单',
},
{
title: '完成',
desc: ''
}
]
},
interiorStateStep: {
current: 0,
title: '内部流转',
items: [
{
title: '采购员',
desc: '新增询价单',
},
{
title: '采购经理',
desc: '审核询价单',
},
{
title: '副总经理',
desc: '审核询价单',
},
{
title: '采购员',
desc: '提交询价单',
},
{
title: '完成',
desc: ''
}
]
}
})
// 模拟数据
const [data, setdata] = useState<any>({});
// 询价商品
......@@ -357,12 +304,13 @@ const Details: React.FC<parmas> = (props) => {
progressDot
current={Number(data.externalState - 1)}
>
{detailData.externalStateStep.items.map((item, index) => {
{Object.keys(data).length > 0 && data.externalInquiryListStateResponses.map((item, index) => {
return (
<Step
key={index}
title={item.title}
description={item.desc}
title={item.roleName}
description={item.operationalProcess}
status={item.isExecute ? 'finish' : 'wait'}
/>
);
})}
......@@ -374,12 +322,13 @@ const Details: React.FC<parmas> = (props) => {
progressDot
current={Number(data.interiorState - 1)}
>
{detailData.interiorStateStep.items.map((item, index) => {
{Object.keys(data).length > 0 && data.interiorRequisitionFormStateResponses.map((item, index) => {
return (
<Step
key={index}
title={item.title}
description={item.desc}
title={item.roleName}
description={item.operationalProcess}
status={item.isExecute ? 'finish' : 'wait'}
/>
);
})}
......@@ -479,4 +428,4 @@ const Details: React.FC<parmas> = (props) => {
)
}
export default Details
\ No newline at end of file
export default Details
......@@ -19,7 +19,7 @@ const FlowRecord: React.FC<parmas> = (props) => {
}
const outerColumns: EditableColumns[] = [{
title: '序号',
dataIndex: 'inquiryListId',
dataIndex: 'id',
}, {
title: '操作角色',
dataIndex: 'roleName',
......@@ -40,7 +40,7 @@ const FlowRecord: React.FC<parmas> = (props) => {
}]
const insideColumns: EditableColumns[] = [{
title: '序号',
dataIndex: 'inquiryListId',
dataIndex: 'id',
}, {
title: '操作人',
dataIndex: 'roleName',
......
......@@ -434,19 +434,20 @@ const Details: React.FC<parmas> = (props) => {
{
Object.keys(data).length > 0 &&
<>
{type === 'rfq' ?
{type === 'quote' ?
<TabPane tab="外部流转" key="1">
<Steps
style={{ padding: '20px 0' }}
progressDot
current={data.externalState - 1}
>
{detailData.externalStateStep.items.map((item, index) => {
{Object.keys(data).length > 0 && data.externalRequisitionFormResponses.map((item, index) => {
return (
<Step
key={index}
title={item.title}
description={item.desc}
title={item.roleName}
description={item.operation}
status={item.isExecute ? 'finish' : 'wait'}
/>
);
})}
......@@ -460,12 +461,13 @@ const Details: React.FC<parmas> = (props) => {
progressDot
current={data.externalState - 1}
>
{detailData.externalStateStep.items.map((item, index) => {
{Object.keys(data).length > 0 && data.externalInquiryListStateResponses.map((item, index) => {
return (
<Step
key={index}
title={item.title}
description={item.desc}
title={item.roleName}
description={item.operationalProcess}
status={item.isExecute ? 'finish' : 'wait'}
/>
);
})}
......@@ -477,12 +479,13 @@ const Details: React.FC<parmas> = (props) => {
progressDot
current={Number(data.interiorState - 1)}
>
{detailData.interiorStateStep.items.map((item, index) => {
{Object.keys(data).length > 0 && data.interiorRequisitionFormStateResponses.map((item, index) => {
return (
<Step
key={index}
title={item.title}
description={item.desc}
title={item.roleName}
description={item.operationalProcess}
status={item.isExecute ? 'finish' : 'wait'}
/>
);
})}
......@@ -575,7 +578,7 @@ const Details: React.FC<parmas> = (props) => {
</div>
<div className={style.item_wrap}>
{
type === 'rfq' ?
type === 'quote' ?
<>
<div className={style.mainCol_title}>外部流转记录</div>
<Table columns={flowRecord.external} rowKey='id' pagination={false} dataSource={data.externalInquiryListLogResponses} />
......
......@@ -136,7 +136,9 @@ class FilterStore {
for (const filterItem of newFilterList) {
switch (filterItem.type) {
case FILTER_TYPE.category:
tempFilterParam.categoryId = Number(filterItem.key[0])
if(Number(filterItem.key[0])) {
tempFilterParam.categoryId = Number(filterItem.key[0])
}
break
case FILTER_TYPE.customerCategory:
tempFilterParam.customerCategoryId = Number(filterItem.key[0])
......
......@@ -13,7 +13,7 @@ export function isObject(obj: any) {
return Object.prototype.toString.call(obj) === '[object Object]'
}
export function formatTimeString(date, format: string = 'YYYY-MM-DD HH:mm:ss') {
export function formatTimeString(date, format = 'YYYY-MM-DD HH:mm:ss') {
return date ? moment(date).format(format) : ''
}
......@@ -115,7 +115,7 @@ export function timeRange(val: number) {
export const arrayGroupsByCount = (array, count) => {
let index = 0;
let newArray = [];
const newArray = [];
while (index < array.length) {
newArray.push(array.slice(index, index += count));
}
......@@ -139,7 +139,7 @@ export function isPrimeNum(num) {
if (!isThree(num)) {
return false;
}
for (var i = 2; i < num / 5 + 1; i++) {
for (let i = 2; i < num / 5 + 1; i++) {
if (num % i == 0) {
return false;
}
......@@ -154,13 +154,13 @@ function isNum(num) {
}
function isDual(num) {
var num = num.toString();
var lastNum = num.substring(num.length - 1, num.length);
const lastNum = num.substring(num.length - 1, num.length);
return lastNum % 2 == 0 || lastNum % 5 == 0 ? false : true;
}
function isThree(num) {
var str = num.toString();
var sum = 0;
for (var i = 0; i < str.length; i++) {
const str = num.toString();
let sum = 0;
for (let i = 0; i < str.length; i++) {
sum += +str.substring(i, i + 1);
};
return sum % 3 == 0 ? false : true;
......@@ -443,7 +443,7 @@ export interface FileData {
url: string;
};
/**
/**
* 初始化 Upload 数据
*/
export function normalizeFiledata(url: string): FileData
......@@ -458,7 +458,7 @@ export function normalizeFiledata(url: any): any {
uid: Math.random().toFixed(16).slice(2, 10),
name: fileName,
status: 'done',
url,
url,
data: url, // formily Upload value 需要这个字段
};
};
......@@ -502,16 +502,16 @@ export const isJSONStr = str => {
* @param {array} item 需要赋值的值
*/
export const coverColFiltersItem = (
data: Array<{[key: string]: any}>,
dataIndex: string,
data: Array<{[key: string]: any}>,
dataIndex: string,
item: {[key: string]: any}
) => {
const index = data.findIndex(i => i.dataIndex === dataIndex);
if (index !== -1) {
data.splice(index, 1, {
...data[index],
filters: item,
filters: item,
});
}
};
......@@ -528,7 +528,7 @@ export const findLastIndexFlowState = (data: any[], customKey = 'isExecute'): nu
}
// 循环数据,找到状态值,一直覆盖
for (let i = 0; i < data.length; i++) {
if (!Boolean(data[i][customKey])) {
if (!data[i][customKey]) {
index = i - 1;
}
// 循环到最后如果 index 还是为 0 的话,说明工作流全部跑完了,此时 index 为 data.length - 1
......@@ -543,4 +543,4 @@ export default {
isArray,
isObject,
omit,
}
\ No newline at end of file
}
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