Commit 9fb99efd authored by XieZhiXiong's avatar XieZhiXiong
parents 79f6da9e 4ec27509
......@@ -119,7 +119,13 @@ const AuthConfigRoute: RouterChild = {
component: '@/pages/accountSetting/editAccount',
hideInMenu: true,
},
//
//消息中心
{
path: '/memberCenter/systemSetting/message',
name: 'message',
component: '@/pages/systemSetting/message'
},
],
}
......
......@@ -39,6 +39,7 @@ const memberCenterRoute = {
icon: 'smile',
key: 'home',
component: '@/pages/index',
// component: '@/pages/home',
},
...routes,
{
......
......@@ -152,6 +152,13 @@ const LogisticsRoute: RouterChild = {
name: 'addToOrderSubmit',
component: '@/pages/logistics/logisticsSubmit/toOrderSubmitDetail',
hideInMenu: true
},
// 待提交物流单-新增
{
path: '/memberCenter/logisticsAbility/logisticsSubmit/toOrderSumitList/newAdd',
name: 'addToOrderSubmit',
component: '@/pages/logistics/logisticsSubmit/detail',
hideInMenu: true
},
// 待提交物流单-编辑
{
......
......@@ -17,7 +17,7 @@ export default [{
{
path: '/memberCenter/tranactionAbility/enquiryOffer/enquirySearch/preview',
name: 'enquirySearchPreview',
component: '@/pages/transaction/enquiryOffer/components/detail',
component: '@/pages/transaction/enquiryOffer/enquirySearch/detail',
hideInMenu: true,
},
// 报价单查询-列表
......@@ -37,7 +37,7 @@ export default [{
{
path: '/memberCenter/tranactionAbility/enquiryOffer/enquiryOfferSearch/demand/preview',
name: 'enquiryOfferSearchDemandPreview',
component: '@/pages/transaction/enquiryOffer/components/detail',
component: '@/pages/transaction/enquiryOffer/enquirySearch/detail',
hideInMenu: true,
},
// 待新建报价单-列表
......@@ -78,7 +78,7 @@ export default [{
{
path: '/memberCenter/tranactionAbility/enquiryOffer/toAddSubmitList/demand/preview',
name: 'toAddSubmitListDemandPreview',
component: '@/pages/transaction/enquiryOffer/components/detail',
component: '@/pages/transaction/enquiryOffer/enquirySearch/detail',
hideInMenu: true,
},
// 待新建报价单-详情
......@@ -105,7 +105,7 @@ export default [{
{
path: '/memberCenter/tranactionAbility/enquiryOffer/enquiryOne/demand/preview',
name: 'enquiryOneDemandPreview',
component: '@/pages/transaction/enquiryOffer/components/detail',
component: '@/pages/transaction/enquiryOffer/enquirySearch/detail',
hideInMenu: true,
},
// 待审核报价单(一级)-详情
......@@ -132,7 +132,7 @@ export default [{
{
path: '/memberCenter/tranactionAbility/enquiryOffer/enquiryTwo/demand/preview',
name: 'enquiryTwoDemandPreview',
component: '@/pages/transaction/enquiryOffer/components/detail',
component: '@/pages/transaction/enquiryOffer/enquirySearch/detail',
hideInMenu: true,
},
// 待审核报价单(二级)-详情
......@@ -159,7 +159,7 @@ export default [{
{
path: '/memberCenter/tranactionAbility/enquiryOffer/toSubmit/demand/preview',
name: 'toSubmitDemandPreview',
component: '@/pages/transaction/enquiryOffer/components/detail',
component: '@/pages/transaction/enquiryOffer/enquirySearch/detail',
hideInMenu: true,
},
// 待提交报价单-详情
......
......@@ -452,6 +452,8 @@ export default {
'menu.systemSetting.accountSetting': '账号安全设置',
'menu.systemSetting.editAccount': '编辑账号信息',
'menu.systemSetting.message': '消息中心',
// 加工能力, assign 指的是 指派生产通知单
'menu.handling': '加工',
'menu.handling.assign': '指派生产通知单',
......
......@@ -227,7 +227,8 @@ const BasicInfoForm: React.FC<Iprops> = (props) => {
>
<Cascader
allowClear={false}
disabled={!isUpdateAttribute}
// disabled={!isUpdateAttribute}
disabled={history.location.query?.id}
options={customerCategoryTree}
fieldNames={{ label: 'title', value: 'id', children: 'children' }}
onChange={onCustomerCategoryChange}
......
......@@ -2,7 +2,11 @@ import React, { useState, useEffect, useRef } from 'react'
import { history } from 'umi'
import { Form, Select, Radio, Checkbox, InputNumber } from 'antd'
import { PublicApi } from '@/services/api'
import { GetLogisticsSelectListCompanyResponse, GetLogisticsSelectListShipperAddressResponse, GetLogisticsSelectListFreightTemplateResponse } from '@/services'
import {
GetLogisticsSelectListCompanyResponse,
GetLogisticsSelectListShipperAddressResponse,
GetLogisticsSelectListFreightTemplateResponse
} from '@/services/LogisticsApi'
import { store } from '@/store'
const { ProductStore } = store
......@@ -51,7 +55,7 @@ const LogisticsForm: React.FC<Iprops> = (props) => {
setLogisticsAddressList(res.data)
})
PublicApi.getLogisticsSelectListCompany().then(res=>{
PublicApi.getLogisticsSelectListCompany({cooperateType: '2'}).then(res=>{
setLogisticsCompanyLists(res.data)
})
......
......@@ -551,7 +551,6 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
// 校验阶梯范围
const validatorNumberRange = (rule, value, callback) => {
console.log(value,'v')
try {
if(Array.isArray(value)){
let range = value.map(item => {
......@@ -563,7 +562,7 @@ const PriceAttributeForm: React.FC<Iprops> = (props) => {
},
[]
)
let result = range.reduce((a, b) => { if(a<b) return b })
let result = range.map(Number).reduce((a, b) => { if(a<b) return b })
if(!result) throw new Error('请正确输入阶梯数量范围');
if(range[0]!==minOrderNumber) throw new Error('阶段的起始值必须为最小起订数');
callback()
......
.homeGuide{
background-color: @main-color;
border-radius: 8px;
display: flex;
justify-content: center;
align-items: center;
height: 90px;
color: white;
position: relative;
.gridStyle{
display: flex;
flex: 1;
justify-content: space-between;
align-items: center;
border-right: 1px solid rgba(255, 255, 255, 0.2);
height: 90px;
p{
font-size: 12px;
font-weight: 400;
margin-left: 24px;
margin-bottom: 0;
padding: 0 0 8px 0;
line-height: 1;
vertical-align: middle;
}
.firstp{
height: 24px;
line-height: 24px;
}
.guideTitle{
font-size: 14px;
font-weight: 400;
}
.guideIcon{
font-size: 14px;
margin-right: 27px;
}
.guideIconFirst{
font-size: 24px;
vertical-align: bottom;
}
}
.gridStyleFirst{
flex: 0 0 16%;
}
.guideClose{
width: 56px;
height: 20px;
background: rgba(0, 0, 0, 0.2);
border-radius: 0px 8px 0px 8px;
position: absolute;
right: 0;
top: 0;
cursor: pointer;
text-align: center;
}
&::after {
border-left: 8px solid transparent;
border-right: 8px solid transparent;
border-top: 8px solid #6B778C;
content: "";
position: absolute;
right: 18px;
bottom: -7px;
}
}
.giudeMenuBox{
border-radius: 5px;
padding: 16px;
background-color: #fff;
flex: 0 0 16%;
//重写步骤条
:global{
.ant-steps-vertical.ant-steps-dot .ant-steps-item .ant-steps-icon-dot{
border: 1px solid #DFE1E6;
background-color: #fff;
}
.ant-steps-vertical > .ant-steps-item > .ant-steps-item-container > .ant-steps-item-tail::after{
background-color: #fff;
border-right: 1px dashed #DFE1E6;
}
}
}
\ No newline at end of file
import React, { useState, useEffect } from 'react'
import { Button, Card, Space, Steps, Dropdown, Radio, Row, Col, Table, Tabs, Tag, Avatar, Image, List, Badge, Menu } from 'antd'
import cx from 'classnames'
import styles from './index.less'
import StatusTag from '@/components/StatusTag'
import { CaretUpOutlined, CompassFilled, CompassOutlined, RightCircleFilled, RightOutlined, UpOutlined } from '@ant-design/icons'
import { PageHeaderWrapper } from '@ant-design/pro-layout'
const { Step } = Steps;
const Home: React.FC<{}> = () => {
const menu = (
<div className={styles.giudeMenuBox}>
<Steps progressDot current={1000} direction="vertical">
<Step title="定义产品功能" description={<><p>开发第一步,标准功能、自定义功能及云功能编辑</p><a href="">如何定义</a></>} />
<Step title="定义产品功能" description={<><p>开发第一步,标准功能、自定义功能及云功能编辑</p><a href="">如何定义</a></>} />
<Step title="定义产品功能" description={<><p>开发第一步,标准功能、自定义功能及云功能编辑</p><a href="">如何定义</a></>} />
<Step title="定义产品功能" description={<><p>开发第一步,标准功能、自定义功能及云功能编辑</p><a href="">如何定义</a></>} />
<Step title="定义产品功能" description={<><p>开发第一步,标准功能、自定义功能及云功能编辑</p><a href="">如何定义</a></>} />
</Steps>
</div>
);
return (
<PageHeaderWrapper>
<Space direction="vertical" style={{width:'100%'}}>
<Row>
<Col span={24}>
<div className={styles.homeGuide}>
<div className={cx(styles.gridStyle, styles.gridStyleFirst)}>
<p className={styles.firstp}>
<CompassFilled className={styles.guideIconFirst} />
<span>&nbsp;使用向导</span>
</p>
</div>
<Dropdown overlay={menu}>
<div className={styles.gridStyle}>
<div>
<p className={styles.guideTitle}>1.新建商品</p>
<p className={styles.guideDesc}>三分钟智能化,完成商品创建</p>
</div>
<UpOutlined className={styles.guideIcon} />
</div>
</Dropdown>
<Dropdown overlay={menu}>
<div className={styles.gridStyle}>
<div>
<p className={styles.guideTitle}>1.新建商品</p>
<p className={styles.guideDesc}>三分钟智能化,完成商品创建</p>
</div>
<UpOutlined className={styles.guideIcon} />
</div>
</Dropdown>
<Dropdown overlay={menu}>
<div className={cx(styles.gridStyle, styles.gridStyleLast)}>
<div>
<p className={styles.guideTitle}>1.新建商品</p>
<p className={styles.guideDesc}>三分钟智能化,完成商品创建</p>
</div>
<UpOutlined className={styles.guideIcon} />
</div>
</Dropdown>
<div className={styles.guideClose}>
<p>关闭</p>
</div>
</div>
</Col>
</Row>
</Space>
</PageHeaderWrapper>
)
}
export default Home
......@@ -3,24 +3,186 @@
* @Date: 2020-11-06
* @Author: HJX
*/
import React from 'react';
import { Form } from 'antd';
import React, { useState, useEffect } from 'react';
import { Form, Input, Button, Select } from 'antd';
import moment from 'moment';
import { ColumnType } from 'antd/lib/table/interface'
import { LinkOutlined } from '@ant-design/icons';
import { PublicApi } from '@/services/api';
import ShippingModal from '../../../components/sumbitOrderModal';
import InvoicesModal from '../../../components/sumbitOrderModal';
const { Search } = Input;
const { Option } = Select;
const layout: any = {
colon: false,
labelCol: { style: { width: '174px' } },
wrapperCol: { span: 9 },
labelAlign: "left"
};
const BasicInfo:React.FC<{}> = () => {
return(
<Form
{...layout}
>
export interface interfaceinfo {
parmas?: any,
handleRevise?: Function
}
</Form>
const BasicInfo: React.FC<interfaceinfo> = (props) => {
const { parmas, handleRevise } = props;
const [listcompany, setlistcompany] = useState<any>([]);//物流服务商
const [shipperaddress, setshipperaddress] = useState<any>([]);//发货地址
const [shippingvisible, setshippingvisible] = useState<boolean>(false);
const [invoicesvisible, setinvoicesvisible] = useState<boolean>(false);
const [form] = Form.useForm();
//获取物流服务商
const getListCompany = () => {
const company = new Promise(resolve => {
PublicApi.getLogisticsSelectListCompany({ cooperateType: '1' }).then(res => {
if (res.code === 1000) {
resolve(res.data)
}
})
})
return company
}
//获取发货地址
const getShipperAddress = () => {
const address = new Promise(resolve => {
PublicApi.getLogisticsSelectListShipperAddress().then(res => {
if (res.code === 1000) {
resolve(res.data)
}
})
})
return address
}
useEffect(() => {
Promise.all([getListCompany(), getShipperAddress()]).then(res => {
setlistcompany(res[0]);
setshipperaddress(res[1]);
})
}, [])
// 对应发货单 columns
const shippingColumns:ColumnType<any>[] = [
{
title: '发货单号',
dataIndex: 'invoicesNo',
},
{
title: '对应订单号',
dataIndex: 'orderNo',
},
{
title: '单据摘要',
dataIndex: 'invoicesAbstract',
},
{
title: '对应仓库',
dataIndex: 'inventory',
},
{
title: '单据类型',
dataIndex: 'invoicesType',
},
{
title: '单据时间',
dataIndex: 'transactionTime',
render: (text: any) => <>{moment(text).format('YYYY-MM-DD HH:mm:ss')}</>
}
]
// 对应订单 columns
const invoicesColumns:ColumnType<any>[] = [
{
title: '单据号',
dataIndex: 'orderNo',
},
{
title: '单据摘要',
dataIndex: 'orderThe',
},
{
title: '会员名称',
dataIndex: 'supplyMembersName',
},
{
title: '单据时间',
dataIndex: 'createTime',
render: (text: any) => <>{moment(text).format('YYYY-MM-DD HH:mm:ss')}</>
}
]
// 确定
const handleShipping = (type:any, values:any, param:any) => {
handleRevise(values[0], 1);
form.setFieldsValue({
shipmentOrderCode: values[0].invoicesNo
})
setshippingvisible(false);
}
const handleInvoices = (type:any, values:any, param:any) => {
handleRevise(values[0], 2);
form.setFieldsValue({
invoicesNo: values[0].orderNo
})
setinvoicesvisible(false);
}
return (
<>
<Form
{...layout}
form={form}
>
<Form.Item label="单据摘要" name="digest" rules={[{ required: true, message: '请输入单据摘要' }]}>
<Input />
</Form.Item>
<Form.Item label="物流服务商" name="companyId" rules={[{ required: true, message: '请选择流服务商' }]}>
<Select allowClear>
{
listcompany.map((item: any, index: number) => (
<Option key={item.id} value={item.id}>{item.name}</Option>
))
}
</Select>
</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)} />
{/* <Button type='link'>查看单号详情</Button> */}
</Form.Item>
<Form.Item label='对应订单号/售后单' name='invoicesNo'>
<Search value={parmas.invoicesNo || undefined} 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='receiverFullAddress'>
<div style={{ lineHeight: '36px' }}>{parmas.memberName}/{parmas.phone}</div>
<div>{parmas.receiverFullAddress}</div>
</Form.Item>
<Form.Item label="发货地址" name="shipperAddressId">
<Select allowClear>
{
shipperaddress.map((item: any, index: number) => (
<Option key={item.id} value={item.id}>{item.fullAddress}</Option>
))
}
</Select>
</Form.Item>
<Form.Item label="单据时间" name='voucherTime'><span></span></Form.Item>
<Form.Item label="外部状态" name='externalState'><span></span></Form.Item>
</Form>
<ShippingModal
title='选择发货单'
columns={shippingColumns}
type={2}
onOk={(type, values, param) => handleShipping(type, values, param)}
dialogVisible={shippingvisible}
onCancel={() => setshippingvisible(false)}
/>
<InvoicesModal
title='选择订单'
columns={invoicesColumns}
type={1}
onOk={(type, values, param) => handleInvoices(type, values, param)}
dialogVisible={invoicesvisible}
onCancel={() => setinvoicesvisible(false)}
/>
</>
)
}
export default BasicInfo;
\ No newline at end of file
......@@ -3,7 +3,7 @@
* @Date: 2020-11-06
* @Author: HJX
*/
import React from 'react';
import React, { useState } from 'react';
import { Button, Card, Tabs } from 'antd';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import ReturnEle from '@/components/ReturnEle';
......@@ -14,16 +14,59 @@ import Goods from './components/goods';//物流单明细
const { TabPane } = Tabs
const AddEditLogistics: React.FC<{}> = () => {
// 用于提交的
const [parmas, setParmas] = useState<any>({
digest: '',//单据摘要
companyId: '',//物流服务商id
shipmentOrderId: '',//发货单id 1
shipmentOrderCode: '',//发货单号 1
relevanceOrderId: '',//对应订单id
invoicesNo: '',//对应单据编号 1
relevanceType: '',//对应单据类型 1-订单 2-换货申请单(退货发货) 3-换货申请单(换货发货) 4-退货申请单
receiverName: '',//收货方名称1
receiverAddressId: '',//收货方id 1
shipperAddressId: '',//发货方id
phone: '',
receiverFullAddress: '',
detailList: [],//物流单明细列表 ,LogisticsOrderDetailRequest
})
const [data, setData] = useState<any>({})
// 调用修改Fn
const handleRevise = (value: any, index: number) => {
console.log(value, '传过来的数据')
const data = { ...parmas };
if (index === 1) {
data.invoicesNo = value.orderNo;//对应单据编号
data.receiverAddressId = value.deliveryAddresId;//收货方id
data.shipmentOrderId = value.id;//发货单id
data.shipmentOrderCode = value.invoicesNo;//发货单号
} else if (index === 2) {
data.phone = value.phone;
data.receiverName = value.receiverName;//收货方名称
data.receiverFullAddress = value.fullAddress;
data.memberName = value.supplyMembersName
}
setParmas(data)
}
// 提交数据
const handleSubmit = () => {
console.log('提交数据');
}
return (
<PageHeaderWrapper
onBack={() => history.goBack()}
backIcon={<ReturnEle description='返回' />}
extra={<Button type="primary"> 保存</Button>}
extra={<Button type="primary" onClick={handleSubmit}> 保存</Button>}
>
<Card>
<Tabs type="card">
<TabPane key='tab-1' tab='基本信息'>
<BasicInfo />
<BasicInfo
parmas={parmas}
handleRevise={handleRevise}
/>
</TabPane>
<TabPane key='tab-2' tab='物流单明细'>
<Goods />
......
......@@ -299,61 +299,56 @@ const Deatail: React.FC<{}> = () => {
}
})
}
console.log('query', query)
//从销售订单来
if (query.orderId) {
PublicApi.getOrderPurchaseOrderDetails({id: query.orderId}).then(res => {
if(res.code === 1000) {
const data = res.data;
console.log(res.data, '查询销售订单详情')
actions.setFieldValue('receiverName', data.receiverName);// 收货人
actions.setFieldValue('receiverAddressId', data.deliveryAddresId);//收货地址id
actions.setFieldValue('receiverFullAddress', data.fullAddress); // 收货地址
setshipmentOrderCode(data.deliverNo);
setinvoicesNo(data.orderNo);
}
})
//发货单号
// if (query.shipmentOrderCode) {
// setshipmentOrderCode(query.shipmentOrderCode)
// }
if (query.shipmentOrderCode) {
setshipmentOrderCode(query.shipmentOrderCode)
}
//设置地址 发货单id 逻辑有物流单的用物流单优先 无物流单用订单 二选一
// setShipmentOrderID(query.orderDeliveryDetailsId || null)//发货单id
// setInvoicesId(query.invoicesId || null)//订单id
setShipmentOrderID(query.orderDeliveryDetailsId || null)//发货单id
setInvoicesId(query.invoicesId || null)//订单id
//订单号
// if (query.invoicesNo) {
// setinvoicesNo(query.invoicesNo)
// }
// if (query.orderDeliveryDetailsId) {//发货单
// PublicApi.getWarehouseInvoicesList({
// current: '1',
// pageSize: '100000'
// }).then(res => {
// if (res.code === 1000) {
// console.log(res.data, 100086)
// let v = res.data.data.filter(v => v.id == query.orderDeliveryDetailsId).map(v => v)
// let { memberName, fullAddress, deliveryAddresId } = v[0] || {}
// actions.setFieldValue('receiverName', memberName)
// actions.setFieldValue('receiverAddressId', deliveryAddresId)
// actions.setFieldValue('receiverFullAddress', fullAddress)
// }
// })
// return
// }
// if(query.invoicesId){//订单
// PublicApi.getOrderLogisticsOrderList({
// current: '1',
// pageSize: '100000'
// }).then(res => {
// if (res.code === 1000) {
// let v = res.data.data.filter(v => v.id == query.invoicesId).map(v => v)
// let { memberName, fullAddress, deliveryAddresId } = v[0] || {}
// actions.setFieldValue('receiverName', memberName)
// actions.setFieldValue('receiverAddressId', deliveryAddresId)
// actions.setFieldValue('receiverFullAddress', fullAddress)
// }
// })
// }
if (query.invoicesNo) {
setinvoicesNo(query.invoicesNo)
}
if (query.orderDeliveryDetailsId) {//发货单
PublicApi.getWarehouseInvoicesList({
current: '1',
pageSize: '100000'
}).then(res => {
if (res.code === 1000) {
console.log(res.data, 100086)
let v = res.data.data.filter(v => v.id == query.orderDeliveryDetailsId).map(v => v)
let { memberName, fullAddress, deliveryAddresId } = v[0] || {}
actions.setFieldValue('receiverName', memberName)
actions.setFieldValue('receiverAddressId', deliveryAddresId)
actions.setFieldValue('receiverFullAddress', fullAddress)
}
})
return
}
if(query.invoicesId){//订单
PublicApi.getOrderLogisticsOrderList({
current: '1',
pageSize: '100000'
}).then(res => {
if (res.code === 1000) {
let v = res.data.data.filter(v => v.id == query.invoicesId).map(v => v)
let { memberName, fullAddress, deliveryAddresId } = v[0] || {}
actions.setFieldValue('receiverName', memberName)
actions.setFieldValue('receiverAddressId', deliveryAddresId)
actions.setFieldValue('receiverFullAddress', fullAddress)
}
})
}
}
return () => {
......@@ -361,6 +356,11 @@ const Deatail: React.FC<{}> = () => {
}
}, [])
// const { form } = useFormSpy({ selector: [['onFieldValueChange', 'detailList']], reducer: v => v })
// console.log(form);
// const detailData;// = form.getFieldValue('detailList')
//具体可以看 formProduct
const formSearch: ISchema = {
type: 'object',
......
......@@ -502,6 +502,9 @@ const CommodityDetail = (props) => {
}
const handleInquiry = () => {
if (!checkoutUserInfo()) {
return
}
window.location.href = `/memberCenter/tranactionAbility/goodsOffer/addEnquiryOrder/rfq?id=${id}&memberId=${memberId}`
}
......
......@@ -25,6 +25,7 @@ const CreditPayWay: React.FC<CreditPayWayPropsType> = (props) => {
const [confirmLoading, setConfirmLoading] = useState<boolean>(false)
const [securityInfo, setSecurityInfo] = useState<GetMemberSecurityGetResponse>()
const [pageLoading, setPageLoading] = useState<boolean>(true)
const [payDisabled, setPayDisabled] = useState<boolean>(false)
const handlePasswordChange = (value: string) => {
setPayPassword(value)
......@@ -71,6 +72,7 @@ const CreditPayWay: React.FC<CreditPayWayPropsType> = (props) => {
let param = {
id: orderId,
paymentInformationId: payInfo.paymentInformationId,
payPassword
}
setConfirmLoading(true)
//@ts-ignore
......@@ -128,7 +130,7 @@ const CreditPayWay: React.FC<CreditPayWayPropsType> = (props) => {
) : (
<div className={styles.pay_wray}>
<div className={styles.pay_wray_title}>您还没有设置支付密码</div>
<Button loading={confirmLoading} className={styles.pay_btn} onClick={() => history.push(`/memberCenter/systemSetting/accountSetting/paycode?backPay=true`)} >去设置密码</Button>
<Button loading={confirmLoading} disabled={payDisabled} className={styles.pay_btn} onClick={() => history.push(`/memberCenter/systemSetting/accountSetting/paycode?backPay=true`)} >去设置密码</Button>
</div>
)
}
......
......@@ -87,7 +87,7 @@ const AddRepository:React.FC<{}> = (props) => {
<p><span>调出前库存:</span><span>{record.frontExportInventory}</span></p>
</div>
} },
{ dataIndex: 'repositOut', title: '调库存', align: 'center', render: (_, record) => {
{ dataIndex: 'repositOut', title: '调库存', align: 'center', render: (_, record) => {
return <div>
<p><span>调入库存:</span><span>{record.foldInventory}</span></p>
<p><span>调入后库存:</span><span>{record.foldRearInventory}</span></p>
......
......@@ -236,6 +236,7 @@ const PositionSetting:React.FC<PositionSettingProps> = (props) => {
// 设置货品名称
addSchemaAction.setFieldValue('goodsName', data?.name || '')
addSchemaAction.setFieldValue('goodsId', goodsId)
addSchemaAction.setFieldValue('itemNo', data?.code || '')
}
}
......
......@@ -430,6 +430,20 @@ export const repositDetailSchema: ISchema = padRequiredMessage({
itemNo: {
type: 'string',
"x-component": 'Text',
title: '货号',
default: '暂无',
visible: false,
},
goodsId: {
type: 'string',
"x-component": 'Text',
title: '货品ID',
default: '暂无',
visible: false,
},
goodsName: {
type: 'string',
"x-component": 'Text',
title: '对应货品',
default: '暂无'
},
......@@ -515,7 +529,7 @@ export const repositDetailSchema: ISchema = padRequiredMessage({
{ label: '所有会员共享(默认)', value: 1 },
{ label: '指定会员', value: 0 },
],
"title": "选择渠道会员",
"title": "选择会员",
default: 1,
required: true,
"x-linkages": [
......@@ -630,7 +644,7 @@ export const repositTabOneSchema: ISchema = padRequiredMessage({
editable: false,
enum: []
},
itemNo: {
goodsName: {
type: 'string',
"x-component": 'Text',
title: '对应货品',
......
.customList{
:global{
.ant-list-item-meta{
align-items: center;
}
}
.messageText{
font-size: 14px;
font-weight: 400;
color: #606266;
}
.messageTitle{
margin: 0 30px;
font-size: 14px;
font-weight: 500;
color: #303133;
}
}
\ No newline at end of file
import React from 'react';
import { history } from 'umi';
import { Button, Row, Col, Card, List, Avatar } from 'antd';
import styles from './index.less'
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import { PlusOutlined } from '@ant-design/icons';
import StatusTag from '@/components/StatusTag';
const Message: React.FC<{}> = () => {
const data = [
{
id: 1,
icon: '',
status: 'success',
type: '系统消息',
title: '订单发货',
message: '订单发货,请注意查收,清单发货,请注意查收!',
time: '2015-15-05',
},
{
id: 2,
icon: '',
status: 'success',
type: '系统消息',
title: '订单收货',
message: '订单发货,请注意查收,清单发货,请注意查收!',
time: '2015-15-05',
},
{
id: 3,
icon: '',
status: 'primary',
type: '系统消息',
title: '系统消息',
message: '账户异常,请注意账户资金安全!',
time: '2015-15-05',
},
{
id: 4,
icon: '',
status: 'primary',
type: '系统消息',
title: '系统消息',
message: '账户支出300元,请注意账户资金安全!',
time: '2015-15-05',
},
];
const renderMessage = (data) => {
return (
<>
<StatusTag type={data.status} title={data.type} />
<span className={styles.messageTitle}>{data.title}</span>
<span className={styles.messageText}>{data.message}</span>
</>
)
}
const showTotal = (total) => {
return `共 ${total} 条`;
}
return (
<PageHeaderWrapper>
<Card
title="消息列表"
>
<List
itemLayout="horizontal"
dataSource={data}
className={styles.customList}
pagination={{
onChange: page => {
console.log(page);
},
pageSize: 10,
size: "small",
showQuickJumper: true,
total: 4,
showTotal: showTotal
}}
renderItem={item => (
<List.Item>
<List.Item.Meta
avatar={<Avatar src={item.icon} />}
title={renderMessage(item)}
/>
<div>{item.time}</div>
</List.Item>
)}
/>
</Card>
</PageHeaderWrapper>
)
}
export default Message;
......@@ -7,6 +7,7 @@ import { GlobalConfig } from '@/global/config'
import { orderTypeLabel } from '../constant'
import { formatTimeString } from '@/utils'
import StatusColors from '../../../components/StatusColors'
import { message } from 'antd'
interface OrderDetailHookProps {
// 采购、销售
......@@ -42,9 +43,11 @@ export const useOrderDetail = (options: OrderDetailHookProps) => {
const reloadFormData = useCallback(() => {
if (id) {
const fn = type === 'purchaseOrder' ? PublicApi.getOrderProcurementOrderDetails : PublicApi.getOrderPurchaseOrderDetails
fn({ id }).then(({ data, code }) => {
if (code === 1000) {
setFormData(data)
fn({ id }, { ctlType: "none" }).then(res => {
if (res.code === 1000) {
setFormData(res.data)
} else {
message.error(res.message)
}
})
}
......
......@@ -7,6 +7,7 @@ import { useAsyncSelect } from '@/formSchema/effects/useAsyncSelect'
import { PublicApi } from '@/services/api'
import { useHttpRequest } from '@/hooks/useHttpRequest'
import { OrderDetailContext } from '../../_public/order/context'
import { fetchOptions } from '@/pages/balance/common'
export interface OrderElectronModalProps {
currentRef: any
......@@ -165,6 +166,7 @@ const CreateOrderElectronModal:React.FC<OrderElectronModalProps> = (props) => {
const handleConfirm = () => {
schemaActions.submit()
}
return (
<ModalForm
modalTitle='确认提交审核'
......@@ -181,7 +183,7 @@ const CreateOrderElectronModal:React.FC<OrderElectronModalProps> = (props) => {
electronBtn
}}
effects={($, actions) => {
$('onFormInit').subscribe(() => {
// $('onFormInit').subscribe(() => {
if (data.isElectronicContract === 1) {
useAsyncSelect('contractTemplateId', async () => (await PublicApi.getOrderSelectListContractTemplate()).data, ['name', 'id'])
} else {
......@@ -192,7 +194,7 @@ const CreateOrderElectronModal:React.FC<OrderElectronModalProps> = (props) => {
}
})
}
})
// })
}}
/>
)
......
import React, { useState, useEffect } from 'react';
import React, { useState, useEffect, useRef } from 'react';
import style from './index.less'
import { history } from 'umi';
import { Button, Card, Tabs, Steps, Table } from 'antd';
......@@ -6,6 +6,7 @@ import { LinkOutlined } from '@ant-design/icons';
import { ColumnType } from 'antd/lib/table/interface';
import { EyeOutlined, ClockCircleOutlined, UpOutlined, DownOutlined, StopOutlined, CheckSquareOutlined } from '@ant-design/icons'
import ReutrnEle from '@/components/ReturnEle';
import { StandardTable } from 'god';
import { PageHeaderWrapper } from '@ant-design/pro-layout';
import StatusColors from '@/pages/transaction/components/StatusColors';
import { quoteOrderInternalState, inquiryQuoteOuterState } from '../../common/tableStatusList';
......@@ -32,6 +33,7 @@ export interface parmas {
const Details: React.FC<parmas> = (props) => {
const [visible, setvisible] = useState(false)
const ref = useRef<any>({});
//page_type: 1.待确认报价单,2.待审核报价单1级,3.待审核报价单2级,4.报价单查询,5.待提交审核报价单
//view: 1.询价单号,2.报价单号
const { id, page_type } = props;
......@@ -244,17 +246,20 @@ const Details: React.FC<parmas> = (props) => {
setview(2)
PublicApi.getOrderNotarizeEnquiryProductQuotationDetails({ id }).then(res => {
if (res.code === 1000) {
setdata(res.data)
setdata(res.data);
}
})
});
}
// PublicApi.getOrderNotarizeEnquiryQuotedPriceDetails({ id }).then(res => {
// if (res.code === 1000) {
// setdata(res.data)
// }
// })
}, [])
const fetchData = (params:any) => {
return new Promise(resolve => {
PublicApi.getOrderInquiryDetails({...params,id}).then(res => {
console.log(res, 10086)
resolve(res.data)
})
})
}
useEffect(() => {
if (Object.keys(data).length > 0) {
......@@ -416,8 +421,16 @@ const Details: React.FC<parmas> = (props) => {
</Card>
<Card className={style.item_wrap}>
<div className={style.mainCol_title}>询价商品</div>
<Table columns={inquiryGoods} pagination={false} rowKey='id' dataSource={data.inquiryListProductRequests} />
<div className={style.mainCol_title} style={view === 2 ? {paddingBottom: '0px'}: {paddingBottom: '24px'}}>询价商品</div>
{view === 1 && <Table columns={inquiryGoods} pagination={false} rowKey='id' dataSource={data.inquiryListProductRequests} />}
{view === 2 &&
<StandardTable
currentRef={ref}
columns={inquiryGoods}
tableProps={{ rowKew: 'id' }}
fetchTableData={(params: any) => fetchData(params)}
/>
}
</Card>
<Card className={style.item_wrap}>
<div className={style.mainCol_title}>{infoTem[(Number(page_type) === 1 || Number(page_type) === 5) ? 'freight' : 'base'].title}</div>
......
......@@ -114,7 +114,7 @@ const List: React.FC<listParams> = (props) => {
dataIndex: 'quotationNo',
align: 'center',
render: (text: any, records: any) => <EyePreview type="button" handleClick={() => {
handleToDetail(2, records.id)
handleToDetail(1, records.id)
}}>{text}</EyePreview>
},
{
......@@ -123,7 +123,7 @@ const List: React.FC<listParams> = (props) => {
dataIndex: 'requisitionFormNo',
align: 'center',
render: (text: any, records: any) => <EyePreview type="button" handleClick={() => {
handleToDetail(1, records.requisitionId)//需求单id
handleToDetail(2, records.requisitionId)//需求单id
}}>{text}</EyePreview>
},
{
......
......@@ -90,7 +90,7 @@ const List:React.FC<{listParams}> = (props) => {
dataIndex:'quotationNo',
align:'center',
render: (text: any,records: any) => <EyePreview type="button" handleClick={() => {
handleToDetail(2,records.id)
handleToDetail(1,records.id)
}}>{text}</EyePreview>
},
{
......@@ -99,7 +99,7 @@ const List:React.FC<{listParams}> = (props) => {
dataIndex:'requisitionFormNo',
align:'center',
render: (text: any,records: any) => <EyePreview type="button" handleClick={() => {
handleToDetail(1,records.requisitionId)//需求单id
handleToDetail(2,records.requisitionId)//需求单id
}}>{text}</EyePreview>
},
{
......
......@@ -57,7 +57,7 @@ interface dataInfoType {
settlementWay: string
}
const detailInfo: React.FC<{}> = () => {
const EnquiryDetail: React.FC<{}> = () => {
const ref = useRef<any>({})
const [pagetype, setpagetype] = useState(history.location.query.page_type)
let interiorStateList = []
......@@ -726,4 +726,4 @@ const detailInfo: React.FC<{}> = () => {
</PageHeaderWrapper>
)
}
export default detailInfo
\ No newline at end of file
export default EnquiryDetail
\ No newline at end of file
@import "../../../member/components/index.less";
.count{
font-size: 24px;
color: #303133;
font-weight: 500;
}
.add-btn{
margin-bottom: 24px;
padding: 6px 0;
text-align: center;
background: #FAFBFC;
}
.alignCenter{
text-align: center;
}
.alignLeft{
text-align: left;
}
.hidden{
display: none;
}
.block{
display: block;
}
.selectBtn {
margin: 0 16px;
}
.filter-btn{
width : 112px;
margin: 0 0 0 16px;
}
.select {
width : 160px;
&:nth-last-of-type(1) {
margin-right: 0;
}
}
.mainCol {
background-color: #fff;
margin-bottom : 24px;
padding : 0 24px;
box-sizing : border-box;
&-title {
font-size : 16px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color : #303133;
padding : 20px 0;
}
&:nth-last-of-type(1) {
margin: 0;
}
&-row {
display : flex;
flex-wrap : wrap;
padding-bottom: 16px;
&-col {
display: flex;
width : calc(100% / 3);
padding: 16px 0;
&-option {
flex : 1;
font-size : 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color : #909399;
&:nth-last-of-type(1) {
flex : 3;
padding-right: 20px;
box-sizing : border-box;
color : #303133;
}
}
}
}
&-rows {
display : flex;
padding-bottom: 16px;
&-cols {
flex: 1;
.cols-main {
display: flex;
padding: 16px 0;
&:nth-last-of-type(1) {
padding-bottom: 0;
}
&-options {
flex : 1;
font-size : 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color : #909399;
&:nth-last-of-type(1) {
flex : 3;
padding-right: 20px;
box-sizing : border-box;
color : #303133;
}
}
}
}
}
}
\ No newline at end of file
......@@ -27,7 +27,7 @@ import { history } from 'umi'
import { LinkOutlined, PlusOutlined, QuestionCircleOutlined, MinusOutlined, MinusCircleOutlined } from '@ant-design/icons'
import {
Row, Col, Card, Button, Table, Popconfirm, Radio, DatePicker,
Form, Spin, Select, Switch, Cascader, Tabs, Input, Tooltip, Space
Form, Spin, Select, Switch, Cascader, Tabs, Input, Tooltip, Space, message
} from 'antd';
import { PageHeaderWrapper } from '@ant-design/pro-layout'
import moment from 'moment'
......@@ -816,6 +816,8 @@ const Detail: React.FC<{}> = () => {
})
}
}).catch(err => {
message.error('请检查!有必填项没填写或选择')
})
}
......@@ -977,7 +979,7 @@ const Detail: React.FC<{}> = () => {
<PageHeaderWrapper
onBack={() => history.goBack()}
backIcon={<ReutrnEle description="返回" />}
title={headerTitle}
// title={headerTitle}
extra={
<Button type="primary" onClick={handleSubmitTabForm}> 保存</Button>
}
......
......@@ -71,7 +71,7 @@ const List:React.FC<{}> = () => {
key:'requisitionFormNo',
dataIndex:'requisitionFormNo',
align:'center',
render:(text:any, record:any) => <EyePreview type="button" url={`/memberCenter/tranactionAbility/enquiryOffer/toAddSubmitList/demand/preview?id=${record.id}`}>{text}</EyePreview>
render:(text:any, record:any) => <EyePreview type="button" url={`/memberCenter/tranactionAbility/enquiryOffer/toAddSubmitList/demand/preview?id=${record.requisitionId}`}>{text}</EyePreview>
},
{
title:'报价单摘要',
......
......@@ -166,7 +166,7 @@ const List:React.FC<{}> = () => {
* @param {type}
* @return {type}
*/
const handleDelete = (arr:number[]| string[]) => {
const handleDelete = (arr:number[]) => {
PublicApi.postOrderRequisitionFormDeleteAll({ ids: arr }).then(res => {
ref.current.reload()
})
......@@ -174,7 +174,7 @@ const List:React.FC<{}> = () => {
//批量提交
const handleSubmitAll = (ids: number[]) => {
PublicApi.postOrderSubmitRequisitionFormAll({ ids: ids }).then(res => {
PublicApi.postOrderNewRequisitionFormAuditAll({ ids: ids }).then(res => {
ref.current.reload()
})
}
......
......@@ -6,7 +6,7 @@ import { useRowSelectionTable } from '@/hooks/useRowSelectionTable';
import { ISchema } from '@formily/antd';
import ModalTable from '@/components/ModalTable'
import { PublicApi } from '@/services/api'
import StatusColors from '@/pages/transaction/components/StatusColors'
import { history } from 'umi'
import { quoteOrderInternalState, inquiryQuoteOuterState } from '../../../common/tableStatusList';
const layout: any = {
......@@ -94,7 +94,7 @@ const BasicInfo: React.FC<queryProps> = (props) => {
// 选择会员弹框结束
useEffect(() => {
if(memberName) {
basicform.setFieldsValue({'memberId': memberId ? 14 : undefined})
basicform.setFieldsValue({'memberId': memberId ? memberId : undefined})
}
},[memberName])
/************* 页面的一些操作start *************/
......@@ -152,7 +152,7 @@ const BasicInfo: React.FC<queryProps> = (props) => {
</Form.Item>
<Form.Item label='被询价会员' name='memberId' rules={[{ required: true, message: '请选择被询价会员' }]}>
<Search value={memberName ? memberName : undefined} readOnly enterButton={<><LinkOutlined /> 选择</>} onSearch={()=>setVisibleChannelMember(true)} />
{memberName && <Button type='link'>查看会员详情</Button>}
{memberName && <Button type='link' onClick={() => window.open(`/shop?shopId=${btoa(JSON.stringify({memberId}))}`)}>查看会员详情</Button>}
</Form.Item>
<Form.Item label='询价单号' name='orderNumber'>
<span>{Object.keys(editData).length > 0 ? editData.inquiryListNo : '-'}</span>
......
......@@ -148,7 +148,7 @@ const BasicInfo: React.FC<queryProps> = (props) => {
</Form.Item>
<Form.Item label='对应询价单号' name='inquiryListNo' rules={[{ required: true, message: '请选择被询价会员' }]}>
<Search value={Object.keys(inquiryNo).length > 0 ? inquiryNo.orderNo : undefined} readOnly enterButton={<><LinkOutlined /> 选择</>} onSearch={()=>setVisibleChannelMember(true)} />
{Object.keys(inquiryNo).length > 0 && <Button type='link'>查看询价单详情</Button>}
{Object.keys(inquiryNo).length > 0 && <Button type='link' onClick={() => window.open(`/memberCenter/tranactionAbility/inquiryQuote/enquiryOrder/rfq/preview?id=${inquiryNo.orderId}`)}>查看询价单详情</Button>}
</Form.Item>
<Form.Item label='报价单号' name='quotationNo'>
<span>{Object.keys(editData).length > 0 ? editData.quotationNo : '-'}</span>
......
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