Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
sfp-program
Overview
Overview
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Sweet Zhang
sfp-program
Commits
d7c9a320
Commit
d7c9a320
authored
Sep 01, 2022
by
Chao Sun
Browse files
Options
Browse Files
Download
Plain Diff
冲突
parents
e28f73cf
20eb17e4
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
299 additions
and
208 deletions
+299
-208
main.js
+4
-0
pages/dataImport/data-import.css
+201
-0
pages/dataImport/data-import.vue
+73
-208
util/interceptor.ts
+4
-0
util/numerPipe.ts
+17
-0
No files found.
main.js
View file @
d7c9a320
...
...
@@ -10,6 +10,10 @@ Vue.config.productionTip = false;
Vue
.
prototype
.
axios
=
axios
;
Vue
.
prototype
.
$api
=
api
;
import
{
numberToCurrencyNo
}
from
'@/utils/numberToCurrency'
// 配置全局过滤器,实现数字千分位格式
Vue
.
filter
(
'numberToCurrency'
,
numberToCurrencyNo
)
App
.
mpType
=
'app'
const
app
=
new
Vue
({
api
,
...
...
pages/dataImport/data-import.css
0 → 100644
View file @
d7c9a320
/* 保单年度弹窗 */
.policySelectContainer
{
position
:
fixed
;
z-index
:
2
;
left
:
0
;
top
:
0
;
width
:
100%
;
height
:
100%
;
background-color
:
rgba
(
0
,
0
,
0
,
0.35
);
}
.policySelectContainer
.policyYearContainer
{
position
:
absolute
;
bottom
:
0
;
left
:
0
;
width
:
100%
;
height
:
57%
;
background-color
:
#fff
;
border-top-left-radius
:
40
rpx
;
border-top-right-radius
:
40
rpx
;
padding
:
20
rpx
30
rpx
0
;
box-sizing
:
border-box
;
}
.policyYearContainer
.modalTitle
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
font-weight
:
bold
;
}
.policyYearContainer
.modalTitle
text
:last-child
{
color
:
#FF0000
;
}
.policyYearItemContainer
{
display
:
flex
;
flex-wrap
:
wrap
;
justify-content
:
space-around
;
}
.policyYearItemContainer
view
{
width
:
9%
;
height
:
0
;
padding-bottom
:
9%
;
margin
:
20
rpx
0
;
color
:
#fff
;
border-radius
:
50%
;
position
:
relative
;
margin-right
:
6
rpx
;
color
:
#333
;
font-weight
:
bold
;
}
.policyYearItemContainer
view
.actived
{
background
:
linear-gradient
(
135deg
,
#CEB07D
0%
,
#FFDDA9
56%
,
#FED495
100%
,
#FED495
100%
);
color
:
#6B4000
;
}
.policyYearItemContainer
view
text
{
position
:
absolute
;
left
:
50%
;
top
:
50%
;
transform
:
translate
(
-50%
,
-55%
);
}
.policyStepContainer
{
display
:
flex
;
justify-content
:
space-around
;
margin-top
:
40
rpx
;
}
.policyStepContainer
button
{
flex
:
0
0
30%
;
font-size
:
32
rpx
;
color
:
#000
;
font-weight
:
bold
;
border
:
1px
solid
#CEB07D
;
}
.policyStepContainer
uni-button
::after
{
border
:
1px
solid
#CEB07D
;
}
.policyStepContainer
button
.actived
{
background
:
linear-gradient
(
135deg
,
#CEB07D
0%
,
#FFDDA9
56%
,
#FED495
100%
,
#FED495
100%
);
color
:
#6B4000
;
}
.policyStepContainer
button
.actived
,
.policyStepContainer
button
.actived
::after
{
border
:
none
;
}
.confirm
button
{
background
:
linear-gradient
(
135deg
,
#CEB07D
0%
,
#FFDDA9
56%
,
#FED495
100%
,
#FED495
100%
);
color
:
#6B4000
;
font-weight
:
bold
;
font-size
:
36
rpx
;
margin-top
:
56
rpx
;
width
:
300
rpx
;
}
.confirm
button
,
.confirm
button
::after
{
border
:
none
;
}
.uni-textarea
{
position
:
relative
;
}
.pasteDiscernment
{
position
:
absolute
;
right
:
0
;
bottom
:
0
;
height
:
50
rpx
;
background
:
#9B8055
;
border-radius
:
100px
;
color
:
#fff
;
font-size
:
24
rpx
;
}
.batchDataImportContainer
{
background-color
:
#fbfbfb
;
height
:
90vh
;
}
.batchDataLists
{
margin-top
:
20
rpx
;
background
:
#fff
;
}
.batchDataLists
view
{
display
:
flex
;
text-align
:
center
;
border-bottom
:
1px
solid
#e4e4e4
;
}
.batchDataLists
view
text
:first-child
{
width
:
0
;
flex
:
0
0
35%
;
border-right
:
1px
solid
#e4e4e4
;
}
.batchDataLists
view
text
:last-child
{
width
:
0
;
flex
:
0
0
65%
;
}
.batchDataLists
view
.batchDataTh
{
height
:
60
rpx
;
background
:
linear-gradient
(
135deg
,
#CEB07D
0%
,
#FFDDA9
56%
,
#FED495
100%
,
#FED495
100%
);
line-height
:
60
rpx
;
border-top-left-radius
:
12
rpx
;
border-top-right-radius
:
12
rpx
;
}
.batchDataLists
view
.batchDataTd
{
height
:
80
rpx
;
line-height
:
80
rpx
;
}
.dataOptionContainer
{
margin
:
20
rpx
20
rpx
0
;
margin-bottom
:
34
rpx
;
}
.dataOptionContainer
.uni-textarea
{
background-color
:
#fff
;
margin-bottom
:
20
rpx
;
}
.tips
{
font-size
:
24
rpx
;
color
:
#666
;
padding
:
0
20
rpx
20
rpx
;
background-color
:
#fff
;
}
.tips
text
text
{
font-size
:
28
rpx
;
color
:
#9B8055
;
font-weight
:
bold
;
}
.selectStepContent
,
.selectStepContainer
{
display
:
flex
;
align-items
:
center
;
}
.selectStepContainer
{
justify-content
:
space-between
;
padding
:
20
rpx
20
rpx
0
;
background-color
:
#fff
;
}
.stepContent
{
display
:
flex
;
align-items
:
center
;
border-bottom
:
1px
solid
#e4e4e4
;
padding
:
0
5px
;
}
.selectStepContainer
button
{
background-color
:
transparent
;
}
.selectStepContainer
button
::after
{
border
:
1px
solid
#CEB07D
;
}
.optionContent
{
position
:
fixed
;
bottom
:
0
;
left
:
0
;
width
:
100%
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
background-color
:
#fff
;
}
.optionContent
button
{
flex
:
0
0
46%
;
border
:
2
rpx
solid
#e7c793
;
color
:
#6B4000
;
font-size
:
36
rpx
;
}
.optionContent
button
:last-child
{
background
:
linear-gradient
(
135deg
,
#CEB07D
0%
,
#FFDDA9
56%
,
#FED495
100%
,
#FED495
100%
);
border
:
none
;
}
.batchDataTd
input
{
height
:
100%
;
}
\ No newline at end of file
pages/dataImport/data-import.vue
View file @
d7c9a320
...
...
@@ -13,7 +13,7 @@
</view>
<!-- 自定义 -->
<view>
<button
class=
"mini-btn"
type=
"default"
size=
"mini"
@
click=
"
policyYearModalFlag=true
"
>
自定义
</button>
<button
class=
"mini-btn"
type=
"default"
size=
"mini"
@
click=
"
selectCustomPolicyYear
"
>
自定义
</button>
</view>
</view>
<!-- 提示信息-->
...
...
@@ -24,23 +24,25 @@
<!-- 粘贴数据区域 -->
<view
class=
"uni-textarea"
>
<textarea
v-model=
"pasteData"
placeholder-style=
"color:#999999;font-size:14px;padding-left:9px;padding-top:3px"
placeholder=
"请根据左侧保单年度进行现金价值数据粘贴"
/>
<button
class=
"mini-btn pasteDiscernment"
type=
"default"
size=
"mini"
>
粘贴并识别
</button>
<button
class=
"mini-btn pasteDiscernment"
type=
"default"
size=
"mini"
@
click=
"pasteDataDistinguish"
>
粘贴并识别
</button>
</view>
<!-- 批量数据输入区域 -->
<
scroll-view
class=
"batchDataLists"
upper-threshold=
"200"
scroll-y=
"true
"
>
<
view
class=
"batchDataLists
"
>
<view
class=
"batchDataTh"
>
<text>
保单年度
</text>
<text>
现金价值
</text>
</view>
<scroll-view
scroll-y=
"true"
style=
"height: 560rpx;"
>
<view
class=
"batchDataTd"
v-for=
"item in irrAndSimpleInfos"
>
<text>
{{
item
.
nyear
}}
</text>
<text>
{{
item
.
cashValue
}}
</text
>
<input
class=
"uni-input"
style=
"height: 100%;"
type=
"digit"
v-model=
"item.cashValue"
placeholder=
"请输入纯数字"
/
>
</view>
</scroll-view>
</view>
</view>
<!-- 操作 -->
<view
class=
"optionContent"
>
<button
type=
"default"
plain=
"true"
form-type=
"reset"
>
全部清空
</button>
<button
type=
"default"
plain=
"true"
form-type=
"reset"
@
click=
"clearData"
>
全部清空
</button>
<button
type=
"default"
plain=
"true"
@
click=
"calcute()"
>
{{
calcuteMethod
==
'2'
?
'输入批量数据'
:
'开始计算'
}}
</button>
</view>
<!-- 保单年度选择弹窗 -->
...
...
@@ -58,7 +60,7 @@
</view>
<view
class=
"policyYearItemContainer"
>
<view
v-for=
"item of customPolicyYearRangeCount"
@
click=
"selectCustomPolicyYears(item + customPolicyYearRange * customPolicyYearRangeCount)"
:class=
"
{'actived':getActiveStatus(item + customPolicyYearRange * customPolicyYearRangeCount)}">
<text>
{{
item
+
customPolicyYearRange
*
customPolicyYearRangeCount
>
105
?
''
:
item
+
customPolicyYearRange
*
customPolicyYearRangeCount
}}
</text>
<text>
{{
item
+
customPolicyYearRange
*
customPolicyYearRangeCount
>
this
.
maxPolicyYear
?
''
:
item
+
customPolicyYearRange
*
customPolicyYearRangeCount
}}
</text>
</view>
</view>
<view
class=
"confirm"
>
...
...
@@ -80,18 +82,35 @@
irrAndSimpleInfos
:[{
nyear
:
1
,
cashValue
:
''
}],
customPolicyYearRange
:
0
,
customPolicyYearRangeCount
:
40
,
policyYearLists
:[],
maxPolicyYear
:
105
,
policyYearLists
:[{
nyear
:
1
,
isActived
:
true
,
cashValue
:
''
}],
policyYearModalFlag
:
false
,
}
},
onLoad
()
{
this
.
bindPickerChange
({
detail
:{
value
:
this
.
index
}})
},
methods
:{
// 选择间隔
bindPickerChange
(
e
){
this
.
index
=
e
.
detail
.
value
this
.
index
=
e
.
detail
.
value
;
const
m
=
this
.
stepLists
[
this
.
index
]
===
1
?
2
:
1
;
this
.
policyYearLists
=
[{
nyear
:
1
,
isActived
:
true
,
cashValue
:
''
}];
for
(
let
n
=
m
;
n
<=
this
.
maxPolicyYear
;
n
++
){
let
calcNumber
=
this
.
stepLists
[
this
.
index
]
*
n
;
if
(
calcNumber
<=
this
.
maxPolicyYear
){
this
.
policyYearLists
=
this
.
policyYearLists
.
concat
([{
nyear
:
calcNumber
,
cashValue
:
''
}])
;
}
else
{
break
;
}
}
this
.
irrAndSimpleInfos
=
this
.
policyYearLists
.
concat
([]);
},
// 选择自定义
selectCustomPolicyYear
(){
this
.
policyYearModalFlag
=
true
;
this
.
irrAndSimpleInfos
=
this
.
policyYearLists
=
[];
console
.
log
(
this
.
irrAndSimpleInfos
)
},
// 选择保单年度区间
selectPolicyYearRange
(
e
){
...
...
@@ -99,7 +118,6 @@
},
// 选择保单年度(自定义)
selectCustomPolicyYears
(
e
){
console
.
log
(
e
)
if
(
this
.
policyYearLists
.
filter
(
item
=>
item
.
nyear
==
e
).
pop
()){
this
.
policyYearLists
.
filter
(
item
=>
item
.
nyear
==
e
).
pop
()[
'isActived'
]
=
!
this
.
policyYearLists
.
filter
(
item
=>
item
.
nyear
==
e
).
pop
()[
'isActived'
]
}
else
{
...
...
@@ -122,208 +140,54 @@
this
.
policyYearLists
.
sort
((
a
,
b
)
=>
a
.
nyear
-
b
.
nyear
)
}
this
.
irrAndSimpleInfos
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
policyYearLists
));
},
// 粘贴并识别
pasteDataDistinguish
(){
const
pasteDataLists
=
this
.
pasteData
.
trim
().
split
(
'
\
n'
);
console
.
log
(
pasteDataLists
)
if
(
pasteDataLists
.
length
<=
0
||
pasteDataLists
.
every
((
item
)
=>
item
==
''
)){
uni
.
showModal
({
title
:
'数据识别结果'
,
content
:
'检测到您并没有导入数据,请重新操作'
,
success
:
function
(
res
)
{
if
(
res
.
confirm
)
{
console
.
log
(
'用户点击确定'
);
}
else
if
(
res
.
cancel
)
{
console
.
log
(
'用户点击取消'
);
}
}
});
}
else
if
(
pasteDataLists
.
length
!==
this
.
irrAndSimpleInfos
.
length
){
uni
.
showModal
({
title
:
'数据识别结果'
,
content
:
'检测到您导入的数据条数和选择的保单年度数量不一致,系统将从上到下依次填入,请确认是否继续'
,
success
:
(
res
)
=>
{
if
(
res
.
confirm
)
{
console
.
log
(
'用户点击确定'
);
if
(
this
.
irrAndSimpleInfos
.
length
>
0
){
const
minLength
=
Math
.
min
(
pasteDataLists
.
length
,
this
.
irrAndSimpleInfos
.
length
)
;
console
.
log
(
minLength
)
for
(
let
i
=
0
;
i
<
minLength
;
i
++
){
this
.
irrAndSimpleInfos
[
i
][
'cashValue'
]
=
pasteDataLists
[
i
];
}
}
}
else
if
(
res
.
cancel
)
{
console
.
log
(
'用户点击取消'
);
}
}
});
}
},
// 全部清空
clearData
(){
this
.
pasteData
=
''
;
this
.
irrAndSimpleInfos
.
forEach
(
item
=>
item
.
cashValue
=
''
);
}
}
}
</
script
>
<
style
>
/* 保单年度弹窗 */
.policySelectContainer
{
position
:
fixed
;
z-index
:
2
;
left
:
0
;
top
:
0
;
width
:
100%
;
height
:
100%
;
background-color
:
rgba
(
0
,
0
,
0
,
0.35
);
}
.policySelectContainer
.policyYearContainer
{
position
:
absolute
;
bottom
:
0
;
left
:
0
;
width
:
100%
;
height
:
57%
;
background-color
:
#fff
;
border-top-left-radius
:
40
rpx
;
border-top-right-radius
:
40
rpx
;
padding
:
20
rpx
30
rpx
0
;
box-sizing
:
border-box
;
}
.policyYearContainer
.modalTitle
{
display
:
flex
;
justify-content
:
space-between
;
align-items
:
center
;
font-weight
:
bold
;
}
.policyYearContainer
.modalTitle
text
:last-child
{
color
:
#FF0000
;
}
.policyYearItemContainer
{
display
:
flex
;
flex-wrap
:
wrap
;
justify-content
:
space-around
;
}
.policyYearItemContainer
view
{
width
:
9%
;
height
:
0
;
padding-bottom
:
9%
;
margin
:
20
rpx
0
;
color
:
#fff
;
border-radius
:
50%
;
position
:
relative
;
margin-right
:
6
rpx
;
color
:
#333
;
font-weight
:
bold
;
}
.policyYearItemContainer
view
.actived
{
background
:
linear-gradient
(
135deg
,
#CEB07D
0%
,
#FFDDA9
56%
,
#FED495
100%
,
#FED495
100%
);
color
:
#6B4000
;
}
.policyYearItemContainer
view
text
{
position
:
absolute
;
left
:
50%
;
top
:
50%
;
transform
:
translate
(
-50%
,
-55%
);
}
.policyStepContainer
{
display
:
flex
;
justify-content
:
space-around
;
margin-top
:
40
rpx
;
}
.policyStepContainer
button
{
flex
:
0
0
30%
;
font-size
:
32
rpx
;
color
:
#000
;
font-weight
:
bold
;
border
:
1px
solid
#CEB07D
;
}
.policyStepContainer
uni-button
::after
{
border
:
1px
solid
#CEB07D
;
}
.policyStepContainer
button
.actived
{
background
:
linear-gradient
(
135deg
,
#CEB07D
0%
,
#FFDDA9
56%
,
#FED495
100%
,
#FED495
100%
);
color
:
#6B4000
;
}
.policyStepContainer
button
.actived
,
.policyStepContainer
button
.actived
::after
{
border
:
none
;
}
.confirm
button
{
background
:
linear-gradient
(
135deg
,
#CEB07D
0%
,
#FFDDA9
56%
,
#FED495
100%
,
#FED495
100%
);
color
:
#6B4000
;
font-weight
:
bold
;
font-size
:
36
rpx
;
margin-top
:
56
rpx
;
width
:
300
rpx
;
}
.confirm
button
,
.confirm
button
::after
{
border
:
none
;
}
.uni-textarea
{
position
:
relative
;
}
.pasteDiscernment
{
position
:
absolute
;
right
:
0
;
bottom
:
0
;
height
:
50
rpx
;
background
:
#9B8055
;
border-radius
:
100px
;
color
:
#fff
;
font-size
:
24
rpx
;
}
.batchDataImportContainer
{
background-color
:
#fbfbfb
;
height
:
90vh
;
}
.batchDataLists
{
margin-top
:
20
rpx
;
background
:
#fff
;
padding-bottom
:
120
rpx
;
}
.batchDataLists
view
{
display
:
flex
;
text-align
:
center
;
border-bottom
:
1px
solid
#e4e4e4
;
}
.batchDataLists
view
text
:first-child
{
width
:
0
;
flex
:
0
0
35%
;
border-right
:
1px
solid
#e4e4e4
;
}
.batchDataLists
view
text
:last-child
{
width
:
0
;
flex
:
0
0
65%
;
}
.batchDataLists
view
.batchDataTh
{
height
:
60
rpx
;
background
:
linear-gradient
(
135deg
,
#CEB07D
0%
,
#FFDDA9
56%
,
#FED495
100%
,
#FED495
100%
);
line-height
:
60
rpx
;
border-top-left-radius
:
12
rpx
;
border-top-right-radius
:
12
rpx
;
}
.batchDataLists
view
.batchDataTd
{
height
:
80
rpx
;
line-height
:
80
rpx
;
}
.dataOptionContainer
{
margin
:
20
rpx
20
rpx
0
;
margin-bottom
:
34
rpx
;
}
.dataOptionContainer
.uni-textarea
{
background-color
:
#fff
;
margin-bottom
:
20
rpx
;
}
.tips
{
font-size
:
24
rpx
;
color
:
#666
;
padding
:
0
20
rpx
20
rpx
;
background-color
:
#fff
;
}
.tips
text
text
{
font-size
:
28
rpx
;
color
:
#9B8055
;
font-weight
:
bold
;
}
.selectStepContent
,
.selectStepContainer
{
display
:
flex
;
align-items
:
center
;
}
.selectStepContainer
{
justify-content
:
space-between
;
padding
:
20
rpx
20
rpx
0
;
background-color
:
#fff
;
}
.stepContent
{
display
:
flex
;
align-items
:
center
;
border-bottom
:
1px
solid
#e4e4e4
;
padding
:
0
5px
;
}
.selectStepContainer
button
{
background-color
:
transparent
;
}
.selectStepContainer
button
::after
{
border
:
1px
solid
#CEB07D
;
}
.optionContent
{
position
:
fixed
;
bottom
:
0
;
left
:
0
;
width
:
100%
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
background-color
:
#fff
;
}
.optionContent
button
{
flex
:
0
0
46%
;
border
:
2
rpx
solid
#e7c793
;
color
:
#6B4000
;
font-size
:
36
rpx
;
}
.optionContent
button
:last-child
{
background
:
linear-gradient
(
135deg
,
#CEB07D
0%
,
#FFDDA9
56%
,
#FED495
100%
,
#FED495
100%
);
border
:
none
;
}
@import
'data-import.css'
</
style
>
\ No newline at end of file
util/interceptor.ts
View file @
d7c9a320
import
api
from
"../api/api"
;
import
{
baseURL
,
apiURL
,
sfpURL
}
from
"../environments/environment"
;
// 白名单,不需要携带token就允许被访问的接口
<<<<<<<
HEAD
const
whiteApiList
=
[
'/api/authorize/obtainToken'
]
=======
const
whiteApiList
=
[
`/api/authorize/obtainToken`
]
>>>>>>>
20
eb17e444fb451ad26e91c66292178c8cb3acd4
export
const
interceptor
=
()
=>
{
...
...
util/numerPipe.ts
0 → 100644
View file @
d7c9a320
export
function
numberToCurrencyNo
(
value
)
{
if
(
!
value
)
return
0
// 获取整数部分
const
intPart
=
Math
.
trunc
(
value
)
// 整数部分处理,增加,
const
intPartFormat
=
intPart
.
toString
().
replace
(
/
(\d)(?=(?:\d{3})
+$
)
/g
,
'$1,'
)
// 预定义小数部分
let
floatPart
=
''
// 将数值截取为小数部分和整数部分
const
valueArray
=
value
.
toString
().
split
(
'.'
)
if
(
valueArray
.
length
===
2
)
{
// 有小数部分
floatPart
=
valueArray
[
1
].
toString
()
// 取得小数部分
return
intPartFormat
+
'.'
+
floatPart
}
return
intPartFormat
+
floatPart
}
\ No newline at end of file
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