Commit 692ce8ea authored by 前端-钟卫鹏's avatar 前端-钟卫鹏

Merge branch 'dev' into test

parents a88682d7 cf6eff75
......@@ -88,7 +88,7 @@
"chalk": "^4.1.0",
"clone": "^2.1.2",
"connect-history-api-fallback": "^1.6.0",
"cross-env": "^7.0.2",
"cross-env": "^7.0.3",
"events": "^3.2.0",
"express": "^4.17.1",
"fs-extra": "^9.0.1",
......
import React, { useRef, useEffect, useState } from 'react'
import { Input } from 'antd';
import styled from 'styled-components'
/**
* 自定义数值范围控件
*/
const RowStyleLayout = styled(props => <div {...props} />)`
.site-input-split {
background-color: #fff;
}
.site-input-right {
border-left-width: 0;
}
.site-input-right:hover,
.site-input-right:focus {
border-left-width: 1px;
}
.ant-input-rtl.site-input-right {
border-right-width: 0;
}
.ant-input-rtl.site-input-right:hover,
.ant-input-rtl.site-input-right:focus {
border-right-width: 1px;
}
`
const NumberRange = (props) => {
const { value, mutators } = props
const { placeholder = [], ...rest } = props.props["x-component-props"] || {}
const [rangeValue, setrangeValue] = useState([])
useEffect(() => {
if(rangeValue.length) {
mutators.change(rangeValue);
}
}, [rangeValue])
const loseBlur = (e, index) => {
setrangeValue(() => {
let newValue = [...rangeValue]
newValue[index] = e.target.value
return newValue
})
}
return (
<RowStyleLayout>
<Input.Group compact {...rest}>
<Input
style={{
width: 100,
textAlign: 'center'
}}
placeholder={placeholder[0] || '最小值'}
onBlur={(e) => loseBlur(e, 0)}
/>
<Input
className="site-input-split"
style={{
width: 30,
borderLeft: 0,
borderRight: 0,
pointerEvents: 'none',
}}
placeholder="~"
disabled
/>
<Input
className="site-input-right"
style={{
width: 100,
textAlign: 'center',
}}
placeholder={placeholder[1] || '最大值'}
onBlur={(e) => loseBlur(e, 1)}
/>
</Input.Group>
</RowStyleLayout>
)
}
NumberRange.defaultProps = {}
NumberRange.isFieldComponent = true;
export default NumberRange
\ No newline at end of file
import React, { useRef, useEffect, useState } from 'react'
import { Input } from 'antd';
import styled from 'styled-components'
/**
* 自定义数值范围控件
*/
const RowStyleLayout = styled(props => <div {...props} />)`
.site-input-split {
background-color: #fff;
}
.site-input-right {
border-left-width: 0;
}
.site-input-right:hover,
.site-input-right:focus {
border-left-width: 1px;
}
.ant-input-rtl.site-input-right {
border-right-width: 0;
}
.ant-input-rtl.site-input-right:hover,
.ant-input-rtl.site-input-right:focus {
border-right-width: 1px;
}
`
const NumberRange = (props) => {
const { value, mutators } = props
const { placeholder = [], ...rest } = props.props["x-component-props"] || {}
const [rangeValue, setrangeValue] = useState([])
useEffect(() => {
if(rangeValue.length) {
mutators.change(rangeValue);
}
}, [rangeValue])
const loseBlur = (e, index) => {
setrangeValue(() => {
let newValue = [...rangeValue]
newValue[index] = e.target.value
return newValue
})
}
return (
<RowStyleLayout>
<Input.Group compact {...rest}>
<Input
style={{
width: 100,
textAlign: 'center'
}}
placeholder={placeholder[0] || '最小值'}
onBlur={(e) => loseBlur(e, 0)}
/>
<Input
className="site-input-split"
style={{
width: 30,
borderLeft: 0,
borderRight: 0,
pointerEvents: 'none',
background: '#fff',
}}
placeholder="~"
disabled
/>
<Input
className="site-input-right"
style={{
width: 100,
textAlign: 'center',
}}
placeholder={placeholder[1] || '最大值'}
onBlur={(e) => loseBlur(e, 1)}
/>
</Input.Group>
</RowStyleLayout>
)
}
NumberRange.defaultProps = {}
NumberRange.isFieldComponent = true;
export default NumberRange
......@@ -6,7 +6,7 @@
// background-color: #fff;
// border-radius: 8px;
// .header {
// margin-bottom: 24px;
// .title {
// font-size: 18px;
......@@ -39,10 +39,10 @@
// }
// }
.advertisementSpace {
width: 386px;
margin-bottom: 16px;
height: 217px;
.img {
width: 100%;
height: 100%;
}
}
\ No newline at end of file
}
......@@ -32,9 +32,9 @@ const AdvertisementContainer = () => {
{
data.map((item, key) => {
return (
<AdvertisementSpace
urlLink={item.link}
imageUrl={item.imageUrl}
<AdvertisementSpace
urlLink={item.link}
imageUrl={item.imageUrl}
key={key}
/>
)
......@@ -53,4 +53,4 @@ const AdvertisementSpace: React.FC<Iprops> = (props) => {
</div>
)
}
export default AdvertisementContainer
\ No newline at end of file
export default AdvertisementContainer
......@@ -2,13 +2,14 @@
padding: 24px;
background-color: #fff;
border-radius: 8px;
height: 361px;
.header {
display: flex;
flex-direction: row;
justify-content: space-between;
.title {
color: #303133;
color: #303133;
font-size: 16px;
}
.nextOrPreview {
......@@ -25,6 +26,10 @@
display: flex;
flex-direction: row;
align-items: center;
&:last-of-type {
margin-bottom: 0px;
}
.date {
margin-right: 16px;
padding: 2px 6px;
......@@ -42,6 +47,13 @@
}
.content {
cursor: pointer;
text-overflow: -o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
}
}
}
......@@ -59,7 +71,7 @@
.title {
flex: 1;
text-align: center;
font-size: 20px;
font-size: 20px;
font-weight: 500;
color: #303133;
}
......@@ -83,4 +95,4 @@
justify-content: center;
align-items: center;
}
}
\ No newline at end of file
}
......@@ -17,7 +17,7 @@ const LatestAnnouces: React.FC = () => {
current: 1,
pageSize: 5
})
const getList = (params) => {
setLoading(true);
PublicApi.getManageContentNoticeFindNewestNotice(params)
......@@ -29,7 +29,7 @@ const LatestAnnouces: React.FC = () => {
}
})
}
useEffect(() => {
getList(pagination);
}, [])
......@@ -86,7 +86,7 @@ const LatestAnnouces: React.FC = () => {
})
}
</div>
<Modal
<Modal
width={800}
visible={visible}
footer={false}
......@@ -106,10 +106,10 @@ const LatestAnnouces: React.FC = () => {
<Button onClick={() => setVisible(false)} type={"primary"}>我知道了</Button>
</div>
</div>
</Modal>
</div>
)
}
export default LatestAnnouces
\ No newline at end of file
export default LatestAnnouces
......@@ -2,6 +2,7 @@
background-color: #fff;
padding: 24px;
border-radius: 8px;
height: 235px;
.header {
.title {
......
.userGuaid {
margin-bottom: 24px;
.grid_container {
display: grid;
}
.ability {
margin-top: 16px;
}
.controller {
background-color: @main-color;
height: 48px;
display: flex;
justify-content: center;
align-items: center;
border-radius: 8px;
color: #fff;
display: flex;
flex-direction: row;
margin-left: auto;
cursor: pointer;
.main {
// display: flex;
// flex-direction: row;
.mainSide {
// flex: 1;
// display: flex;
// flex-direction: column;
.ability {
margin-top: 24px;
}
.icon {
font-size: 22px;
}
.text {
margin-left: 8px;
}
}
.advertise {
margin-top: 16px;
}
.rightSide {
.actions {
display: flex;
}
@media (min-width: 1600px) {
.grid_container {
// display: grid;
// grid-template-columns: 75% 25%;
// grid-template-columns: repeat(24, 1fr);
// grid-auto-flow: column dense;
// grid-column-gap: 16px;
.announce {
margin-top: 24px;
}
.top {
display: grid;
grid-template-columns: repeat(24, 1fr);
grid-column-gap: 16px;
grid-row-gap: 16px;
.controller {
background-color: @main-color;
height: 48px;
display: flex;
justify-content: center;
align-items: center;
border-radius: 8px;
color: #fff;
display: flex;
flex-direction: row;
margin-left: auto;
cursor: pointer;
.icon {
font-size: 22px;
.userCenter {
grid-column-start: 1;
grid-column-end: 19;
grid-row-start: 1;
}
.actions {
grid-column-start: 19;
grid-column-end: 25;
grid-row-start: 1;
}
.text {
margin-left: 8px;
.announce {
grid-column-start: 19;
grid-column-end: 25;
margin-top: -200px;
}
.recentVisit {
grid-column-start: 19;
grid-column-end: 25;
}
}
}
.bottom {
display: grid;
grid-template-columns: repeat(24, 1fr);
grid-column-gap: 16px;
grid-row-gap: 16px;
.otherCenter {
grid-column-start: 1;
grid-column-end: 19;
grid-row-start: 1;
margin-top: -425px;
}
.anyQuestion {
grid-column-start: 19;
grid-column-end: 25;
margin-top: 16px;
}
.advertise {
grid-column-start: 19;
grid-column-end: 25;
}
}
}
@media (max-width: 1599px) {
.userCenter {
margin: 16px 0;
}
.recentVisit {
margin-top: 16px;
}
}
......@@ -57,31 +57,9 @@ const Home: React.FC<{}> = () => {
<div className={styles.userGuaid} style={{display: visible ? 'none': 'none'}}>
<UseGuaid/>
</div>
<div className={styles.main}>
<Row gutter={[16,16]}>
<Col className={styles.mainSide} sm={24} md={24} lg={24} xl={16} xxl={18}>
<div>
<UserCenter />
</div>
{
layout.map((item) => {
const RenderComponent = ComponentSelect[item.name]
return (
<div
className={styles.ability}
style={{order: item.sort, display: (item.isShow ? 'block' : 'none')}}
key={item.code}
>
{
RenderComponent &&
<RenderComponent />
}
</div>
)
})
}
</Col>
<Col className={styles.rightSide} sm={24} md={24} lg={24} xl={8} xxl={6}>
<div className={styles.grid_container}>
<div className={styles.top}>
<div className={styles.actions}>
<Row gutter={24}>
<Col span={12}>
<CustomWorkBench
......@@ -95,21 +73,46 @@ const Home: React.FC<{}> = () => {
</div>
</Col>
</Row>
<div className={styles.announce}>
<LatestAnnounce />
</div>
<div className={styles.announce}>
<RecentVisit />
</div>
<div className={styles.announce}>
<AnyQuestion />
</div>
<div className={styles.announce}>
<AdvertisementContainer />
</div>
</Col>
</Row>
</div>
<div className={styles.userCenter}>
<UserCenter />
</div>
<div className={styles.announce}>
<LatestAnnounce />
</div>
<div className={styles.recentVisit}>
<RecentVisit />
</div>
</div>
<div className={styles.bottom}>
<div className={styles.otherCenter}>
{
layout.map((item) => {
const RenderComponent = ComponentSelect[item.name]
return (
<div
className={styles.ability}
style={{order: item.sort, display: (item.isShow ? 'block' : 'none')}}
key={item.code}
>
{
RenderComponent &&
<RenderComponent />
}
</div>
)
})
}
</div>
<div className={styles.anyQuestion}>
<AnyQuestion />
</div>
<div className={styles.advertise}>
<AdvertisementContainer />
</div>
</div>
</div>
</>
</PageHeaderWrapper>
)
......
......@@ -364,13 +364,13 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
idList = [...idList, ...item.checkedList]
}
if (idList.length <= 0) {
message.info("请选择要移动的商品")
message.info("请选择要删除的商品")
return false
}
Modal.confirm({
centered: true,
className: styles.mallComfirm,
content: `是否从进货单中除选中的商品?`,
content: `是否从进货单中除选中的商品?`,
onOk: () => {
return new Promise((resolve, reject) => {
PublicApi.postSearchShopPurchaseDeletePurchase({ idList: idList }).then(res => {
......@@ -393,16 +393,21 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
* @param ids
*/
const deleteListItems = (ids: number[]) => {
console.log(ids, "ids")
const newOrderList = JSON.parse(JSON.stringify(orderList))
const result = []
for (const item of newOrderList) {
const newItem = item
newItem.checkedList = newItem.checkedList.filter(checkItem => !ids.includes(checkItem))
newItem.orderList = newItem.orderList.filter(orderItem => !ids.includes(orderItem.id))
if (newItem.orderList.length > 0) {
result.push(newItem)
}
}
setOrderList(result)
if(result.every(resItem => resItem.checkedList.length === 0)){
setIndeterminate(false)
}
}
/**
......@@ -750,7 +755,7 @@ const PurchaseOrder: React.FC<PurchaseOrderPropsType> = (props) => {
<Checkbox
value={item.id}
className="common_checkbox"
indeterminate={!!item.checkedList.length && item.checkedList.length < item.defaultCheckedList.length}
indeterminate={!!item.checkedList.length && item.checkedList.length < item.defaultCheckedList.length && item.checkedList.length > 0}
onChange={(e) => onCheckChildAllChange(e, item.id)}
></Checkbox>
<label>{item.shopname}</label>
......
......@@ -60,7 +60,7 @@ const AccountDetail: React.FC<{}> = () => {
title: '交易时间',
dataIndex: 'tradeTime',
key: 'tradeTime',
render: (text: any) => moment(text).format("YYYY-MM-DD HH:mm:ss")
render: (text: any) => moment(text).format("YYYY-MM-DD HH:mm:ss")
},
{
title: '交易金额(元)',
......@@ -91,7 +91,7 @@ const AccountDetail: React.FC<{}> = () => {
let amount = (details.accountBalance*100 - details.lockBalance*100)/100
setWidthdrawAmount(amount)
}
// 提交提现申请
const handleSubmitApply = () => {
setBtnLoading(true)
......@@ -135,8 +135,8 @@ const AccountDetail: React.FC<{}> = () => {
<Space direction="vertical" style={{width:'100%'}}>
<Card headStyle={{borderBottom:'none'}} title="账户提现">
<Row gutter={100}>
<Col
// span={8}
<Col
// span={8}
xxl={8}
xl={12}
lg={12}
......@@ -157,8 +157,8 @@ const AccountDetail: React.FC<{}> = () => {
min={0}
/>
<Button
type="text"
size="small"
type="text"
size="small"
style={{marginLeft:24, color:'#fff'}}
onClick={handleAllCharge}
>
......@@ -173,28 +173,28 @@ const AccountDetail: React.FC<{}> = () => {
</div>
</div>
<div className={styles['repayment-right']}>
<Button ghost onClick={handleSubmitApply} loading={btnLoading}>提交</Button>
<Button ghost onClick={handleSubmitApply} loading={btnLoading} disabled={bankDetail ? false: true}>提交</Button>
</div>
</div>
</Col>
<Col
// span={16}
<Col
// span={16}
xxl={16}
xl={12}
lg={12}
>
<div className={styles.infoRight}>
<Row>
<Col
// span={4}
<Col
// span={4}
xxl={4}
xl={10}
lg={10}
>
<p className={styles.rightTitle}>账户归属:</p>
</Col>
<Col
// span={20}
<Col
// span={20}
xxl={20}
xl={14}
lg={14}
......@@ -203,16 +203,16 @@ const AccountDetail: React.FC<{}> = () => {
</Col>
</Row>
<Row>
<Col
// span={4}
<Col
// span={4}
xxl={4}
xl={10}
lg={10}
>
<p className={styles.rightTitle}>银行账号:</p>
</Col>
<Col
// span={20}
<Col
// span={20}
xxl={20}
xl={14}
lg={14}
......@@ -221,16 +221,16 @@ const AccountDetail: React.FC<{}> = () => {
</Col>
</Row>
<Row>
<Col
// span={4}
<Col
// span={4}
xxl={4}
xl={10}
lg={10}
>
<p className={styles.rightTitle}>开户行:</p>
</Col>
<Col
// span={20}
<Col
// span={20}
xxl={20}
xl={14}
lg={14}
......@@ -246,8 +246,8 @@ const AccountDetail: React.FC<{}> = () => {
<Space direction="vertical" style={{width:'100%'}}>
<Card headStyle={{borderBottom:'none'}} title="账户信息">
<Row gutter={100}>
<Col
// span={8}
<Col
// span={8}
xxl={8}
xl={12}
lg={12}
......@@ -268,24 +268,24 @@ const AccountDetail: React.FC<{}> = () => {
</div>
</div>
</Col>
<Col
// span={16}
<Col
// span={16}
xxl={16}
xl={12}
lg={12}
>
<div className={styles.infoRight}>
<Row>
<Col
// span={4}
<Col
// span={4}
xxl={4}
xl={10}
lg={10}
>
<p className={styles.rightTitle}>账户归属:</p>
</Col>
<Col
// span={20}
<Col
// span={20}
xxl={20}
xl={14}
lg={14}
......@@ -294,16 +294,16 @@ const AccountDetail: React.FC<{}> = () => {
</Col>
</Row>
<Row>
<Col
// span={4}
<Col
// span={4}
xxl={4}
xl={10}
lg={10}
>
<p className={styles.rightTitle}>账户余额(元):</p>
</Col>
<Col
// span={20}
<Col
// span={20}
xxl={20}
xl={14}
lg={14}
......@@ -312,16 +312,16 @@ const AccountDetail: React.FC<{}> = () => {
</Col>
</Row>
<Row>
<Col
// span={4}
<Col
// span={4}
xxl={4}
xl={10}
lg={10}
>
<p className={styles.rightTitle}>锁定金额(元):</p>
</Col>
<Col
// span={20}
<Col
// span={20}
xxl={20}
xl={14}
lg={14}
......@@ -330,16 +330,16 @@ const AccountDetail: React.FC<{}> = () => {
</Col>
</Row>
<Row>
<Col
// span={4}
<Col
// span={4}
xxl={4}
xl={10}
lg={10}
>
<p className={styles.rightTitle}>账户状态:</p>
</Col>
<Col
// span={20}
<Col
// span={20}
xxl={20}
xl={14}
lg={14}
......
......@@ -22,7 +22,7 @@ const modelTitle = {
const InvoiceModal:React.FC<InvoiceModalProps> = (props) => {
const { mode, formInitValue } = props
const selfInitValue = useMemo(() => mode === 'add' ? null : formInitValue, [mode, formInitValue])
const selfInitValue = useMemo(() => mode === 'add' ? null : formInitValue, [mode, formInitValue])
// 由于默认是number类型, 但switch组件只接收boolean
if (selfInitValue) {
selfInitValue.isDefault = !!selfInitValue.isDefault
......@@ -72,4 +72,4 @@ const InvoiceModal:React.FC<InvoiceModalProps> = (props) => {
InvoiceModal.defaultProps = {}
export default InvoiceModal
\ No newline at end of file
export default InvoiceModal
......@@ -12,11 +12,12 @@ const addressSchema: ISchema = {
labelAlign: 'left',
labelCol: 4,
wrapperCol: 20,
full: true
full: true,
},
properties: {
type: {
type: 'radio',
required: true,
title: '开具类型',
enum: [
{
......@@ -29,12 +30,6 @@ const addressSchema: ISchema = {
}
],
default: 1,
"x-rules": [
{
required: true,
message: '请选择开具类型'
},
],
"x-linkages": [
{
type: 'value:visible',
......@@ -45,6 +40,7 @@ const addressSchema: ISchema = {
},
kind: {
type: 'radio',
required: true,
title: '发票种类',
enum: [
{
......@@ -57,39 +53,35 @@ const addressSchema: ISchema = {
}
],
default: 1,
"x-rules": [
{
required: true,
message: '请选择开具类型'
}
]
},
invoiceTitle: {
type: 'string',
required: true,
title: '发票抬头',
"x-rules": [
{
required: true,
message: '请输入发票抬头'
},
{
limitByte: true,
maxByte: 40
},
{
required: true,
message: '请输入发票抬头'
}
]
},
taxNo: {
type: 'string',
required: true,
title: '纳税号',
"x-rules": [
{
required: true,
message: '请输入纳税号'
},
{
limitByte: true,
maxByte: 20
},
{
required: true,
message: '请输入纳税号'
}
]
},
bankOfDeposit: {
......@@ -139,4 +131,4 @@ const addressSchema: ISchema = {
}
}
export default addressSchema
\ No newline at end of file
export default addressSchema
......@@ -92,7 +92,7 @@ export const filterProductDataById = (data, targetData) => {
next.category = next.category || next.customerCategoryName
next.unit = next.unit || next.unitName
next.productName = next.productName || next.name
if (logistics.deliveryType === 2) {
const { code, data } = await PublicApi.getLogisticsShipperAddressGet({
id: logistics.sendAddress
......@@ -118,7 +118,7 @@ export const filterProductDataById = (data, targetData) => {
prev.push(next)
}
return prev
}, [])
}
......@@ -138,7 +138,12 @@ const ProductModalTable:React.FC<ProductModalTableProps> = (props) => {
const handleConfirmProduct = async () => {
// 判断所选择的商品是否属于同一个工作流
const res = await PublicApi.postOrderIsWorkFlow({memberId: rowSelectionCtl.selectRow[0].memberId, productIds: rowSelectionCtl.selectedRowKeys}, { ctlType: 'none' })
const res = await PublicApi.postOrderIsWorkFlow({
memberId: rowSelectionCtl.selectRow[0].memberId,
memberRoleId: rowSelectionCtl.selectRow[0].memberRoleId,
productIds: rowSelectionCtl.selectedRowKeys,
orderModel: schemaAction.getFieldValue('orderModel')
}, { ctlType: 'none' })
if (res.code === 1000) {
const productData = schemaAction.getFieldValue('orderProductRequests')
......@@ -192,4 +197,4 @@ const ProductModalTable:React.FC<ProductModalTableProps> = (props) => {
ProductModalTable.defaultProps = {}
export default ProductModalTable
\ No newline at end of file
export default ProductModalTable
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