Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
J
jinfa-platform
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
shenshaokai
jinfa-platform
Commits
01d74ba1
Commit
01d74ba1
authored
Aug 11, 2020
by
tjy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提交本地代码
parent
6f9d2b3a
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
467 additions
and
113 deletions
+467
-113
index.tsx
src/pages/member/memberImport/index.tsx
+466
-112
addBills.tsx
src/pages/transaction/stockSellStorage/bills/addBills.tsx
+1
-1
No files found.
src/pages/member/memberImport/index.tsx
View file @
01d74ba1
import
React
,
{
useState
,
useRef
}
from
'react'
;
import
React
,
{
ReactNode
,
useState
,
useEffect
,
useRef
}
from
'react'
;
import
{
history
}
from
'umi'
;
import
{
Space
,
Dropdown
,
Button
,
Card
,
Menu
,
Popconfirm
}
from
'antd'
;
import
{
DeleteOutlined
,
PlusOutlined
,
DownOutlined
}
from
'@ant-design/icons'
;
import
{
Row
,
Col
,
Tooltip
,
Input
,
Select
,
Button
,
Card
,
Dropdown
,
Menu
,
Popconfirm
,
Modal
,
}
from
'antd'
;
import
{
PlusOutlined
,
DeleteOutlined
,
EyeOutlined
,
ClockCircleOutlined
,
UpOutlined
,
DownOutlined
,
}
from
'@ant-design/icons'
;
import
{
StandardTable
}
from
'god'
;
import
{
ColumnType
}
from
'antd/lib/table/interface'
;
import
{
createFormActions
}
from
'@formily/antd'
;
import
EyePreview
from
'@/components/EyePreview'
;
import
NiceForm
from
'@/components/NiceForm'
;
import
{
useStateFilterSearchLinkageEffect
}
from
'@/formSchema/effects/useFilterSearch'
;
import
{
FORM_FILTER_PATH
}
from
'@/formSchema/const'
;
import
{
importSchema
}
from
'./schema'
;
import
{
useAsyncInitSelect
}
from
'@/formSchema/effects/useAsyncInitSelect'
;
import
UploadModal
from
'@/components/UploadModal'
;
import
{
SchemaForm
,
SchemaMarkupField
as
Field
,
createFormActions
,
Submit
,
Reset
,
}
from
'@formily/antd'
;
import
{
FormMegaLayout
,
Input
as
oInput
}
from
'@formily/antd-components'
;
import
moment
from
'moment'
;
import
{
PublicApi
}
from
'@/services/api'
;
import
style
from
'./index.less'
;
import
UploadModal
from
'@/components/UploadModal'
;
import
{
timeRange
}
from
'@/utils/index'
;
const
formActions
=
createFormActions
()
;
const
{
Option
}
=
Select
;
// 模拟请求
const
fetchData
=
async
(
params
:
any
)
=>
{
const
res
=
await
PublicApi
.
getMemberMaintenancePage
(
params
);
return
res
.
data
;
};
const
actions
=
createFormActions
();
const
member
Import
:
React
.
FC
<
{}
>
=
()
=>
{
const
member
Maintain
:
React
.
FC
<
[]
>
=
()
=>
{
const
ref
=
useRef
<
any
>
({});
const
[
isFirst
,
setIsFirst
]
=
useState
(
false
);
const
[
isSearch
,
setIsSearch
]
=
useState
(
false
);
const
[
searchName
,
setSearchName
]
=
useState
(
''
);
const
[
searchForm
,
setSearchForm
]
=
useState
<
any
>
({
innerStatus
:
0
,
// 内部状态
outerStatus
:
0
,
// 外部状态
status
:
0
,
// 会员状态
roleId
:
0
,
// 会员角色
memberType
:
0
,
// 会员类型
level
:
0
,
// 会员等级
source
:
0
,
// 注册来源
innerStatus
:
[
'0'
],
// 内部状态
outerStatus
:
[
'0'
],
// 外部状态
status
:
[
'0'
],
// 会员状态
timeRange
:
0
,
// 申请时间
startDate
:
''
,
// 申请开始时间
endDate
:
''
,
// 申请结束时间
});
const
[
searchItem
,
setSearchItem
]
=
useState
<
any
>
({});
const
[
visibleModal
,
setVisibleModal
]
=
useState
(
false
);
const
[
selectedRowKeys
,
setSelectedRowKeys
]
=
useState
<
Array
<
string
>>
([]);
const
[
modalState
,
setModalState
]
=
useState
({
visibleModal
:
false
,
title
:
''
,
});
const
[
currentItem
,
setCurrentItem
]
=
useState
<
any
>
({});
const
c
olumns
:
ColumnType
<
any
>
[]
=
[
const
defaultC
olumns
:
ColumnType
<
any
>
[]
=
[
{
title
:
'ID'
,
dataIndex
:
'memberId'
,
...
...
@@ -47,67 +78,165 @@ const memberImport: React.FC<{}> = () => {
dataIndex
:
'name'
,
align
:
'center'
,
key
:
'name'
,
render
:
(
text
:
any
,
record
:
any
)
=>
(
<
EyePreview
url=
{
`/memberCenter/memberAbility/manage/addMember?id=${record.id}&preview=1`
}
>
{
text
}
</
EyePreview
>
),
render
:
(
text
:
any
,
record
:
any
)
=>
{
return
(
<
div
className=
{
style
.
nameCell
}
>
<
div
className=
{
style
.
nameCellTitle
}
onClick=
{
()
=>
history
.
push
(
'/memberAbility/manage/addMember?type=check'
)
}
>
{
text
}
<
EyeOutlined
/>
</
div
>
<
div
className=
{
style
[
`levelIcon${record.level}`
]
}
></
div
>
</
div
>
);
},
},
{
title
:
'会员类型'
,
dataIndex
:
'
typ
e'
,
dataIndex
:
'
memberTypeNam
e'
,
align
:
'center'
,
key
:
'
typ
e'
,
filtered
:
true
,
key
:
'
memberTypeNam
e'
,
render
:
(
text
:
any
,
record
:
any
)
=>
<>
{
text
}
</>
,
},
{
title
:
'会员角色'
,
dataIndex
:
'role'
,
dataIndex
:
'role
Name
'
,
align
:
'center'
,
key
:
'role'
,
key
:
'roleName'
,
render
:
(
text
:
any
,
record
:
any
)
=>
<>
{
text
}
</>,
},
{
title
:
'申请来源/时间'
,
dataIndex
:
'
applyTi
me'
,
dataIndex
:
'
sourceNa
me'
,
align
:
'center'
,
key
:
'applyTime'
,
key
:
'sourceName'
,
render
:
(
text
:
any
,
record
:
any
)
=>
{
let
component
:
ReactNode
=
null
;
component
=
(
<>
<
div
>
{
text
}
</
div
>
<
div
>
<
ClockCircleOutlined
/>
{
record
.
registerTime
}
</
div
>
</>
);
return
component
;
},
},
{
title
:
'会员状态'
,
dataIndex
:
'status'
,
align
:
'center'
,
filters
:
[
{
text
:
'Male'
,
value
:
'male'
},
{
text
:
'Female'
,
value
:
'female'
},
],
key
:
'status'
,
key
:
'memberStatus'
,
filters
:
[],
filteredValue
:
searchForm
.
memberStatus
||
[
'0'
],
filterMultiple
:
false
,
render
:
(
text
:
any
,
record
:
any
)
=>
{
let
component
:
ReactNode
=
null
;
component
=
(
<
div
style=
{
record
.
status
===
1
?
{
color
:
'#42526E'
}
:
{
color
:
'#00B37A'
}
}
>
{
record
.
status
===
1
?
'冻结'
:
'正常'
}
</
div
>
);
return
component
;
},
},
{
title
:
'外部状态'
,
dataIndex
:
'
externalStatus
'
,
dataIndex
:
'
outerStatusName
'
,
align
:
'center'
,
filters
:
[
{
text
:
'Male'
,
value
:
'male'
},
{
text
:
'Female'
,
value
:
'female'
},
],
key
:
'externalStatus'
,
key
:
'outerStatus'
,
filters
:
[],
filteredValue
:
searchForm
.
outerStatus
||
[
'0'
],
filterMultiple
:
false
,
render
:
(
text
:
any
,
record
:
any
)
=>
{
let
component
:
ReactNode
=
null
;
component
=
(
<
div
style=
{
record
.
outerStatusName
===
1
?
{
color
:
'#FF991F'
}
:
record
.
outerStatusName
===
2
?
{
color
:
'#00B37A'
}
:
{
color
:
'#E63F3B'
}
}
>
{
text
}
</
div
>
);
return
component
;
},
},
{
title
:
'内部状态'
,
dataIndex
:
'innerStatusName'
,
align
:
'center'
,
key
:
'innerStatus'
,
filters
:
[],
filteredValue
:
searchForm
.
innerStatus
||
[
'0'
],
filterMultiple
:
false
,
render
:
(
text
:
any
,
record
:
any
)
=>
{
let
component
:
ReactNode
=
null
;
component
=
(
<
div
style=
{
{
display
:
'flex'
,
justifyContent
:
'center'
,
alignItems
:
'center'
,
}
}
>
<
span
className=
{
record
.
innerStatusName
===
1
?
'commonStatusModify'
:
record
.
innerStatusName
===
2
?
'commonStatusInvalid'
:
record
.
innerStatusName
===
3
?
'commonStatusValid'
:
'commonStatusNoPass'
}
>
<
span
className=
"commonStatus"
></
span
>
</
span
>
{
text
}
</
div
>
);
return
component
;
},
},
{
title
:
'操作'
,
dataIndex
:
'option'
,
align
:
'center'
,
render
:
(
record
:
any
)
=>
{
return
(
render
:
(
text
:
any
,
record
:
any
)
=>
{
let
component
:
ReactNode
=
null
;
component
=
(
<>
<
Button
type=
"link"
>
提交审核
</
Button
>
<
Button
type=
"link"
onClick=
{
()
=>
{
setCurrentItem
(
record
),
setModalState
({
visibleModal
:
true
,
title
:
record
.
status
===
1
?
'会员解冻'
:
'会员冻结'
,
});
}
}
style=
{
{
color
:
'#00B37A'
}
}
>
{
record
.
status
===
1
?
'解冻'
:
'冻结'
}
</
Button
>
<
Button
type=
"link"
onClick=
{
()
=>
history
.
push
(
`/memberCenter/memberAbility/manage/addMember?id=${record.id}`
,
)
history
.
push
(
'/memberAbility/manage/addMember?type=change'
)
}
>
编辑
...
...
@@ -117,6 +246,7 @@ const memberImport: React.FC<{}> = () => {
</
Popconfirm
>
</>
);
return
component
;
},
},
];
...
...
@@ -129,83 +259,307 @@ const memberImport: React.FC<{}> = () => {
</
Menu
>
);
const
rowSelection
=
{
selectedRowKeys
:
selectedRowKeys
,
onChange
:
(
selectedRowKeys
:
any
,
selectedRows
:
any
)
=>
{},
const
[
columns
,
setColumns
]
=
useState
<
any
[]
>
(
defaultColumns
);
// 模拟请求
const
fetchData
=
(
params
:
any
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
PublicApi
.
getMemberMaintenancePage
({
...
searchForm
,
name
:
params
.
name
||
''
,
current
:
params
.
current
,
pageSize
:
params
.
pageSize
,
}).
then
(
res
=>
{
resolve
(
res
.
data
);
});
});
};
// 初始化高级筛选选项
const
fetchSelectOptions
=
async
()
=>
{
const
{
data
}
=
await
PublicApi
.
getMemberMaintenancePageitems
();
return
{
memberType
:
fetchSomeOptions
(
data
.
memberTypes
),
roleId
:
fetchSomeOptions
(
data
.
memberRoles
),
level
:
fetchSomeOptions
(
data
.
memberLevels
),
source
:
fetchSomeOptions
(
data
.
memberSource
),
// 初始化表头筛选项接收的数据类型
const
processData
=
(
data
:
any
)
=>
{
for
(
let
elem
of
data
)
{
elem
.
value
=
elem
.
id
;
}
};
const
handleSearch
=
(
filter
:
any
)
=>
{
let
obj
=
{
...
searchForm
,
status
:
filter
.
memberStatus
||
''
,
outerStatus
:
filter
.
outerStatus
||
''
,
innerStatus
:
filter
.
innerStatus
||
''
,
};
setSearchForm
(
obj
);
};
useEffect
(()
=>
{
if
(
!
isFirst
)
return
setIsFirst
(
true
);
ref
.
current
.
reload
();
},
[
searchForm
.
memberType
,
searchForm
.
roleId
,
searchForm
.
level
,
searchForm
.
source
,
]);
useEffect
(()
=>
{
// if (!isFirst) return;
// setIsFirst(false);
let
timeRanges
=
timeRange
(
searchForm
.
timeRange
);
setSearchForm
({
...
searchForm
,
startDate
:
timeRanges
.
st
,
endDate
:
timeRanges
.
et
,
});
ref
.
current
.
reload
();
// console.log(timeRanges);
},
[
searchForm
.
timeRange
]);
useEffect
(()
=>
{
PublicApi
.
getMemberMaintenancePageitems
().
then
(
res
=>
{
Promise
.
all
([
processData
(
res
.
data
.
memberStatus
),
processData
(
res
.
data
.
innerStatus
),
processData
(
res
.
data
.
outerStatus
),
setSearchItem
(
res
.
data
),
]).
then
(()
=>
{
defaultColumns
.
find
((
target
:
any
)
=>
{
if
(
target
.
filters
)
{
target
.
filters
=
res
.
data
[
target
.
key
];
}
});
setColumns
([...
defaultColumns
]);
});
});
},
[
'searchItem'
]);
const
handleReset
=
()
=>
{
let
searchKey
=
{
roleId
:
0
,
name
:
''
,
memberType
:
0
,
level
:
0
,
source
:
0
,
innerStatus
:
[
'0'
],
outerStatus
:
[
'0'
],
status
:
[
'0'
],
timeRange
:
0
,
startDate
:
''
,
endDate
:
''
,
};
setSearchForm
({
...
searchKey
});
};
const
fetchSomeOptions
=
data
=>
{
return
data
.
map
(
v
=>
({
label
:
v
.
text
,
value
:
v
.
id
}));
const
handleSubmit
=
(
values
:
any
,
type
:
string
)
=>
{
if
(
type
===
'confirm'
)
{
PublicApi
.
postMemberMaintenanceStatus
({
memberId
:
currentItem
.
memberId
,
validateId
:
currentItem
.
validateId
,
status
:
currentItem
.
status
,
remark
:
values
.
remark
,
}).
then
(
res
=>
{
if
(
res
.
code
===
1000
)
{
ref
.
current
.
reload
();
setModalState
({
...
modalState
,
visibleModal
:
false
});
}
});
}
else
{
setModalState
({
...
modalState
,
visibleModal
:
false
});
}
};
const
handleMenuClick
=
(
e
:
any
)
=>
{
console
.
log
(
'menu'
,
e
);
};
const
controllerBtns
=
(
<
Space
>
<
Button
type=
"primary"
icon=
{
<
PlusOutlined
/>
}
onClick=
{
()
=>
history
.
push
(
'/memberCenter/memberAbility/manage/addMember'
)
}
>
新建
</
Button
>
<
Button
onClick=
{
()
=>
setVisibleModal
(
true
)
}
>
导入
</
Button
>
<
Dropdown
.
Button
overlay=
{
menu
}
trigger=
{
[
'click'
]
}
icon=
{
<
DownOutlined
/>
}
>
更多
</
Dropdown
.
Button
>
</
Space
>
);
return
(
<
Card
>
<
StandardTable
tableProps=
{
{
rowKey
:
'id'
}
}
tableProps=
{
{
rowKey
:
'memberId'
,
onChange
:
(
pagination
:
any
,
filter
:
any
)
=>
handleSearch
(
filter
),
}
}
columns=
{
columns
}
currentRef=
{
ref
}
rowSelection=
{
rowSelection
}
fetchTableData=
{
(
params
:
any
)
=>
fetchData
(
params
)
}
controlRender=
{
<
NiceForm
actions=
{
formActions
}
onSubmit=
{
values
=>
ref
.
current
.
reload
(
values
)
}
expressionScope=
{
{
controllerBtns
,
}
}
effects=
{
(
$
,
actions
)
=>
{
useStateFilterSearchLinkageEffect
(
$
,
actions
,
'name'
,
FORM_FILTER_PATH
,
);
useAsyncInitSelect
(
[
'memberType'
,
'roleId'
,
'level'
,
'source'
],
fetchSelectOptions
,
);
}
}
schema=
{
importSchema
}
/>
<
Row
>
<
Col
className=
{
style
.
col
}
span=
{
8
}
>
<
Button
type=
"primary"
onClick=
{
()
=>
history
.
push
(
'/memberAbility/manage/addMember?type=add'
)
}
>
<
PlusOutlined
/>
新建
</
Button
>
<
Button
style=
{
{
margin
:
'0 16px'
}
}
onClick=
{
()
=>
setVisibleModal
(
true
)
}
>
导入
</
Button
>
<
Dropdown
.
Button
overlay=
{
menu
}
trigger=
{
[
'click'
]
}
icon=
{
<
DownOutlined
/>
}
>
更多
</
Dropdown
.
Button
>
</
Col
>
<
Col
className=
{
style
.
col
}
span=
{
12
}
offset=
{
4
}
style=
{
{
textAlign
:
'right'
}
}
>
<
Tooltip
trigger=
{
[
'focus'
]
}
placement=
"top"
title=
{
<
span
>
输入ID、会员名称
进行搜索
</
span
>
}
>
<
Input
.
Search
style=
{
{
width
:
'232px'
}
}
value=
{
searchName
}
placeholder=
"搜索"
onChange=
{
e
=>
setSearchName
(
e
.
target
.
value
)
}
onSearch=
{
val
=>
setSearchForm
({
...
searchForm
,
name
:
val
})
}
/>
</
Tooltip
>
<
Button
style=
{
{
margin
:
'0 16px'
}
}
onClick=
{
()
=>
setIsSearch
(
!
isSearch
)
}
>
高级筛选
{
isSearch
?
<
UpOutlined
/>
:
<
DownOutlined
/>
}
</
Button
>
<
Button
onClick=
{
()
=>
handleReset
()
}
>
重置
</
Button
>
</
Col
>
{
isSearch
?
(
<
Row
className=
{
style
.
subRow
}
>
<
Col
className=
{
style
.
subCol
}
>
<
Select
className=
{
style
.
select
}
value=
{
searchForm
.
memberType
}
onChange=
{
val
=>
setSearchForm
({
...
searchForm
,
memberType
:
val
})
}
>
{
searchItem
.
memberTypes
&&
searchItem
.
memberTypes
.
map
((
item
:
any
,
index
:
string
)
=>
{
return
(
<
Option
value=
{
item
.
id
}
key=
{
index
}
>
{
item
.
text
}
</
Option
>
);
})
}
</
Select
>
<
Select
className=
{
style
.
select
}
value=
{
searchForm
.
roleId
}
onChange=
{
val
=>
setSearchForm
({
...
searchForm
,
roleId
:
val
})
}
>
{
searchItem
.
memberRoles
&&
searchItem
.
memberRoles
.
map
((
item
:
any
,
index
:
string
)
=>
{
return
(
<
Option
value=
{
item
.
id
}
key=
{
index
}
>
{
item
.
text
}
</
Option
>
);
})
}
</
Select
>
<
Select
className=
{
style
.
select
}
value=
{
searchForm
.
level
}
onChange=
{
val
=>
setSearchForm
({
...
searchForm
,
level
:
val
})
}
>
{
searchItem
.
memberLevels
&&
searchItem
.
memberLevels
.
map
(
(
item
:
any
,
index
:
string
)
=>
{
return
(
<
Option
value=
{
item
.
id
}
key=
{
index
}
>
{
item
.
text
}
</
Option
>
);
},
)
}
</
Select
>
<
Select
className=
{
style
.
select
}
value=
{
searchForm
.
source
}
onChange=
{
val
=>
setSearchForm
({
...
searchForm
,
source
:
val
})
}
>
{
searchItem
.
memberSource
&&
searchItem
.
memberSource
.
map
(
(
item
:
any
,
index
:
string
)
=>
{
return
(
<
Option
value=
{
item
.
id
}
key=
{
index
}
>
{
item
.
text
}
</
Option
>
);
},
)
}
</
Select
>
<
Select
className=
{
style
.
select
}
value=
{
searchForm
.
timeRange
}
onChange=
{
val
=>
setSearchForm
({
...
searchForm
,
timeRange
:
val
})
}
>
<
Option
value=
{
0
}
>
时间范围(全部)
</
Option
>
<
Option
value=
{
1
}
>
今天
</
Option
>
<
Option
value=
{
2
}
>
一周内
</
Option
>
<
Option
value=
{
3
}
>
一个月内
</
Option
>
<
Option
value=
{
4
}
>
三个月内
</
Option
>
<
Option
value=
{
5
}
>
六个月内
</
Option
>
<
Option
value=
{
6
}
>
一年内
</
Option
>
<
Option
value=
{
7
}
>
一年前
</
Option
>
</
Select
>
</
Col
>
</
Row
>
)
:
(
''
)
}
</
Row
>
}
/>
<
Modal
title=
{
modalState
.
title
}
visible=
{
modalState
.
visibleModal
}
onOk=
{
()
=>
actions
.
submit
()
}
onCancel=
{
()
=>
handleSubmit
(
false
,
'cancel'
)
}
destroyOnClose
>
<
SchemaForm
components=
{
{
TextArea
:
oInput
.
TextArea
}
}
actions=
{
actions
}
onSubmit=
{
values
=>
handleSubmit
(
values
,
'confirm'
)
}
>
<
FormMegaLayout
labelAlign=
"top"
>
<
Field
name=
"remark"
title=
{
`${modalState.title}原因`
}
x
-
rules=
{
{
required
:
true
,
message
:
`请填写${
currentItem.status === '1' ? '冻结' : '解冻'
}的原因`
,
}
}
x
-
component
-
props=
{
{
placeholder
:
'在此输入你的内容,最长120个字符,60个汉字'
,
}
}
x
-
component=
"TextArea"
/>
</
FormMegaLayout
>
</
SchemaForm
>
</
Modal
>
<
UploadModal
visibleModal=
{
visibleModal
}
fileText=
"会员资料"
...
...
@@ -215,4 +569,4 @@ const memberImport: React.FC<{}> = () => {
);
};
export
default
member
Import
;
export
default
member
Maintain
;
src/pages/transaction/stockSellStorage/bills/addBills.tsx
View file @
01d74ba1
...
...
@@ -239,7 +239,7 @@ const AddBills: React.FC<{}> = (props: any) => {
tableColumns
,
tableAddButton
,
}
}
effects=
{
$
=>
{
effects=
{
$
=>
{
$
(
'onFieldValueChange'
,
'relevanceInvoices'
).
subscribe
(
state
=>
{
setRelevance
(
state
.
value
);
setModalColumns
(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment