Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
K
komatsu-lease-app
Project
Project
Details
Activity
Releases
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
komatsu
komatsu-lease-app
Commits
5482e697
Commit
5482e697
authored
Dec 06, 2022
by
WangRui
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://hel.hand-china.com/komatsu/komatsu-lease-app
parents
44a1afb1
b433d2e5
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
422 additions
and
51 deletions
+422
-51
README.md
README.md
+9
-5
App.vue
src/App.vue
+13
-5
ListItem.vue
src/components/ListItem.vue
+1
-1
index.js
src/modules/calculator/store/index.js
+13
-5
detail.vue
src/modules/calculator/views/detail.vue
+30
-9
index.js
src/modules/repayPlan/api/index.js
+13
-0
index.js
src/modules/repayPlan/store/index.js
+14
-0
index.vue
src/modules/repayPlan/views/index.vue
+85
-0
plan.vue
src/modules/repayPlan/views/plan.vue
+217
-0
login.js
src/utils/login.js
+25
-25
vite.config.js
vite.config.js
+2
-1
No files found.
README.md
View file @
5482e697
...
...
@@ -26,11 +26,11 @@ npm run preview 本地预览打包完的文件
### 子应用
1.
融资计算器
✅
(
✋
.5)
1.
融资计算器
✅
(纯前端,等额本息)
(
✋
.5)
2.
融资意向
✅
(
✋
.5)
3.
项目查询 (
✋
1.5 项目信息明细页面需要重头画)
4.
合同签约 (E签宝, 预览签署文件)
✅
(
✋
2)
5.
还款计划 (支付)(
✋
2)
3.
项目查询 (
✋
1.5 项目信息明细页面需要重头画)
4.
合同签约 (E签宝, 预览签署文件
, 由消息推送后做
)
✅
(
✋
2)
5.
还款计划 (支付
, 只能从上到下支付
)(
✋
2)
6.
还款计划查询 (发票预览下载) (
✋
2)
7.
自助服务
✅
(
✋
.5)
8.
客户信息变更
✅
(
✋
1)
...
...
@@ -53,4 +53,8 @@ npm run preview 本地预览打包完的文件
-
消息推送 (极光推送)(
✋
1)
### **合计:** 22.5 (接口完毕情况下)
\ No newline at end of file
### **合计:** 22.5 (接口完毕情况下)
问题: 支付,ios证书等,代码版权
src/App.vue
View file @
5482e697
...
...
@@ -31,15 +31,23 @@ export default {
},
async
mounted
()
{
const
TempAccess
=
import
.
meta
.
env
.
DEV
?
'60243b9f-5f2b-41f8-8007-67984b5ae1cd'
:
''
let
homePage
=
{
path
:
"applications"
,
replace
:
true
}
if
(
import
.
meta
.
env
.
PROD
)
{
let
index
=
this
.
$router
.
getRoutes
().
filter
(
route
=>
route
.
meta
.
title
)
this
.
$router
.
push
({
path
:
index
[
0
].
path
,
replace
:
true
});
return
;
// 得保证 每个子应用中首页有 title
let
jumRouter
=
await
login
(
TempAccess
);
if
(
jumRouter
.
path
)
{
// 通过消息传入跳转页面的情况
homePage
=
{
...
homePage
,
jumRouter
}
}
else
{
// 一般点击进入
let
index
=
this
.
$router
.
getRoutes
().
filter
(
route
=>
route
.
meta
.
title
);
homePage
.
path
=
index
[
0
];
}
}
const
jumpRouter
=
await
login
(
TempAccess
)
this
.
$router
.
push
({
path
:
jumpRouter
.
path
?
jumpRouter
:
"applications"
,
replace
:
true
});
this
.
$router
.
push
(
homePage
);
}
};
</
script
>
...
...
src/components/ListItem.vue
View file @
5482e697
...
...
@@ -63,7 +63,7 @@ defineEmits(['clickRight', 'click'])
padding: 8px 8px;
}
.
box+.box
{
.
swipe + .swipe
{
margin-top: 20px;
}
...
...
src/modules/calculator/store/index.js
View file @
5482e697
const
state
=
{};
import
{
ref
,
computed
}
from
'vue'
import
{
defineStore
}
from
'pinia'
export
default
{
namespaced
:
true
,
state
,
};
export
const
useCounterStore
=
defineStore
(
'counter'
,
()
=>
{
const
count
=
ref
(
0
)
const
doubleCount
=
computed
(()
=>
count
.
value
*
2
)
function
increment
()
{
count
.
value
++
}
return
{
count
,
doubleCount
,
increment
}
})
src/modules/calculator/views/detail.vue
View file @
5482e697
...
...
@@ -18,7 +18,7 @@
<
script
setup
>
import
{
goBack
}
from
"@/utils/globalFun"
import
{
NavBar
,
Button
}
from
"vant"
;
import
{
NavBar
,
Button
,
Toast
}
from
"vant"
;
import
Notice
from
"@/components/Notice.vue"
import
AuForm
from
'@/components/AuForm.vue'
;
import
AuFormClass
from
"@/components/useAuForm"
;
...
...
@@ -28,36 +28,37 @@ const form = $ref();
const
formConfig
=
$ref
(
new
AuFormClass
([
{
title
:
'物件价格'
,
propName
:
'p
aymentReqDat
e'
,
propName
:
'p
ric
e'
,
type
:
'currency'
,
value
:
''
,
isRequired
:
true
isRequired
:
true
,
},
{
title
:
'还款方式'
,
propName
:
'pay
mentRe3qDat3
e'
,
propName
:
'pay
Typ
e'
,
type
:
'cell'
,
value
:
''
,
value
:
'
均等还款
'
,
isRequired
:
true
,
select
:
[],
disabled
:
true
},
{
title
:
'融资租期(月)'
,
propName
:
'
paymentReqDat3e
'
,
propName
:
'
leaseTermMonth
'
,
type
:
'digit'
,
value
:
''
,
isRequired
:
true
},
{
title
:
'首付款比例'
,
propName
:
'
paymentReqDat3e
'
,
propName
:
'
firstPaymentRatio
'
,
type
:
'rate'
,
value
:
''
,
isRequired
:
true
},
{
title
:
'首付租金日'
,
propName
:
'
paymentReqDat3
e'
,
propName
:
'
firstPaymentDat
e'
,
type
:
'cell'
,
value
:
''
,
isRequired
:
true
,
...
...
@@ -65,9 +66,29 @@ const formConfig = $ref(new AuFormClass([
},
]))
const
checkValues
=
(
values
)
=>
{
if
(
+
values
.
price
<=
0
)
{
Toast
({
message
:
'请输入正确的物件价格'
,
position
:
'top'
});
return
false
;
}
else
if
(
values
.
firstPaymentRatio
>
1
)
{
Toast
({
message
:
'请输入正确首付款比例'
,
position
:
'top'
});
return
false
;
}
return
true
;
}
const
router
=
useRouter
();
const
computing
=
()
=>
{
router
.
push
({
name
:
'calculator-views-plan'
})
if
(
formConfig
.
validate
())
{
let
formValueObj
=
formConfig
.
getValues
()
let
validateValue
=
checkValues
(
formValueObj
)
if
(
validateValue
)
{
router
.
push
({
name
:
'calculator-views-plan'
})
}
}
else
{
Toast
({
message
:
'请将信息填写完整'
,
position
:
'top'
});
}
}
</
script
>
...
...
src/modules/repayPlan/api/index.js
0 → 100644
View file @
5482e697
import
{
get
,
put
,
post
,
File
,
deleteReq
}
from
'@/utils/http'
const
baseURL
=
import
.
meta
.
env
.
VITE_HTTP_BASE_URL
const
api
=
{
// getMakingList (data) { // 查询合同制作列表
// return get(
// `${baseURL}/hlct/v1/0/contracts/toMake`,
// {...data}
// )
// },
};
export
default
api
;
src/modules/repayPlan/store/index.js
0 → 100644
View file @
5482e697
import
{
ref
,
computed
}
from
'vue'
import
{
defineStore
}
from
'pinia'
export
const
useCounterStore
=
defineStore
(
'counter'
,
()
=>
{
const
count
=
ref
(
0
)
const
doubleCount
=
computed
(()
=>
count
.
value
*
2
)
function
increment
()
{
count
.
value
++
}
return
{
count
,
doubleCount
,
increment
}
})
src/modules/repayPlan/views/index.vue
0 → 100644
View file @
5482e697
<
template
>
<div
class=
"container"
>
<NavBar
title=
"还款计划查询"
left-arrow
@
click-left=
"goBack"
/>
<section
class=
"list"
>
<Search
v-model=
"searchVal"
placeholder=
"请输入项目编号/融资金额"
/>
<Notice
detail=
"只可对已关联的项目还款"
/>
<PullRefresh
v-model=
"refreshing"
@
refresh=
"onRefresh"
class=
"scroll"
>
<List
:finished=
"finished"
finished-text=
"没有更多了"
@
load=
"loadApproval"
>
<ListItem
v-for=
"item in listValue"
:other_title=
"item.other_title"
:title=
"item.title"
:values=
"item.values"
@
click=
"jump"
/>
</List>
</PullRefresh>
</section>
</div>
</
template
>
<
script
setup
>
import
{
goBack
}
from
"@/utils/globalFun"
import
{
NavBar
,
List
,
PullRefresh
,
Search
}
from
"vant"
;
import
Notice
from
'@/components/Notice.vue'
import
ListItem
from
'@/components/ListItem.vue'
import
api
from
"../api"
;
import
{
useRouter
}
from
"vue-router"
;
const
searchVal
=
$ref
(
''
);
const
listValue
=
$ref
([
{
title
:
'202204-DB001-001'
,
other_title
:
"2022-07-18"
,
values
:
[[
"剩余应还金额"
,
"状态"
,
"融资金额"
],
[
"¥ 20,000.00"
,
"正常"
,
"¥ 20,000.00"
]]
},
{
title
:
'202204-DB001-001'
,
other_title
:
"2022-07-18"
,
values
:
[[
"剩余应还金额"
,
"状态"
,
"融资金额"
],
[
"¥ 20,000.00"
,
"正常"
,
"¥ 20,000.00"
]]
},
])
const
refreshing
=
$ref
(
true
);
const
finished
=
$ref
(
true
);
const
onRefresh
=
()
=>
{
// 下拉重置参数,重新加载
};
const
loadApproval
=
()
=>
{
}
const
router
=
useRouter
();
const
jump
=
()
=>
{
router
.
push
({
name
:
'repayPlan-views-plan'
})
}
</
script
>
<
style
scoped
lang=
"less"
>
.list {
box-sizing: border-box;
height: calc(100vh - var(--van-nav-bar-height));
display: flex;
flex-direction: column;
justify-content: space-between;
padding-bottom: 10px;
}
.scroll {
box-sizing: border-box;
height: calc(100vh - 30vw);
overflow-y: auto;
}
</
style
>
<route>
{
meta: {
title: '还款计划查询'
}
}
</route>
src/modules/repayPlan/views/plan.vue
0 → 100644
View file @
5482e697
<
template
>
<RepayPlan
navTitle=
"还款计划"
:currencyObj=
"currencyObj"
>
<template
#
list
>
<div
class=
"repay_list"
>
<div
class=
"left"
>
<div
class=
"times-box"
v-for=
"i in 30"
>
<div
class=
"times"
>
{{
i
}}
期
</div>
</div>
</div>
<div
class=
"right"
>
<div
class=
"item"
v-for=
"i in 30"
>
<div
class=
"left-item"
>
<span>
租金
</span>
<span>
2022-06-20
</span>
</div>
<div
class=
"center-item"
>
<p>
<span>
应付金额
</span>
<span>
¥9,000.00
</span>
</p>
<p>
<span>
待付金额
</span>
<span>
¥0.00
</span>
</p>
</div>
<div
class=
"right-item"
>
<span>
明细
</span>
<span
class=
"flag-button overtime"
>
<Icon
style=
"margin-right: 1px;"
name=
"info-o"
/>
逾期
</span>
</div>
</div>
</div>
</div>
</
template
>
<
template
#
footer
>
</
template
>
</RepayPlan>
</template>
<
script
setup
>
import
RepayPlan
from
'@/components/RepayPlan.vue'
import
{
Icon
}
from
'vant'
const
currencyObj
=
$ref
({
financingCurrency
:
'200,000.00'
,
headerCurrency
:
'5,000.00'
,
fristCurrency
:
'10,000.00'
,
times
:
'12'
})
</
script
>
<
style
lang=
"less"
scoped
>
@lineColr: #dcdddf;
.repay_list {
display: flex;
width: 100%;
height: 98%;
overflow-y: auto;
scrollbar-width: none;
/* firefox */
}
.repay_list::-webkit-scrollbar {
display: none;
/* Chrome Safari */
}
@leftW: 45px;
.left {
flex: 0 1 @leftW;
}
.times-box {
display: flex;
height: 100px;
flex-direction: column;
justify-content: center;
background-image: linear-gradient(@lineColr 0%, @lineColr 16%, transparent 16%, transparent 33%, @lineColr 33%, @lineColr 83%, transparent 83%, transparent 100%);
/* 35%设置虚线点y轴上的长度 */
background-position: 50% 50%;
/* right配置右边框位置的虚线 */
background-size: 1px 20px;
/* 第一个参数设置虚线点x轴上的长度;第二个参数设置虚线点的间距 */
background-repeat: repeat-y;
}
.times-box:nth-child(1) {
margin-top: 25px;
height: 70px;
justify-content: flex-start;
}
.times-box:nth-last-child(1) {
// bottom: 80px;
height: 70px;
justify-content: flex-end;
}
.times {
height: @leftW;
width: @leftW;
display: flex;
justify-content: center;
line-height: @leftW;
color: #fff;
background-color: #019ae5;
border-radius: 5px;
}
.right {
flex: 1 0 auto;
padding-left: 20px;
}
.item {
display: flex;
justify-content: space-around;
box-sizing: border-box;
margin-top: 15px;
margin-bottom: 30px;
width: 98%;
height: 70px;
border: 1px solid #dedede;
background-color: #eef5fd;
border-radius: 5px;
padding: 10px 5px 3px 10px;
font-size: 13px;
&>div {
display: flex;
flex-direction: column;
justify-content: space-around;
}
}
.left-item {
flex: 1 0 30%;
span:nth-child(1) {
font-weight: 600;
}
span:nth-child(2) {
color: gray;
}
}
.center-item {
flex: 1 0 45%;
p {
color: gray;
display: flex;
justify-content: space-between;
span:nth-child(2) {
font-weight: 600;
}
}
&>p:nth-child(1) span:nth-child(2) {
color: #019ae5;
}
}
.right-item {
flex: 1 0 25%;
text-align: center;
span:nth-child(1) {
color: #019ae5;
}
span:nth-child(2) {
color: gray;
}
}
.flag-button {
display: flex;
justify-content: center;
align-items: center;
width: 80%;
margin: 0 auto;
height: 40%;
border-radius: 10px;
font-size: 12px;
}
.overtime {
background-color: #eeeeee;
color: orange !important;
border: 1px solid #e2e3e4;
}
.nopay {
background-color: #bec2c5;
color: white !important;
border: 1px solid #bec2c5;
}
.pay {
background-color: #f0f0f0;
color: gray !important;
border: 1px solid #eaeaea;
}
</
style
>
\ No newline at end of file
src/utils/login.js
View file @
5482e697
...
...
@@ -5,7 +5,7 @@ export function bridgeLogin() {
return
new
Promise
((
resolve
)
=>
{
// 调用成功返回
window
.
onSuccess
=
function
(
message
)
{
console
.
log
(
message
,
'测试打印'
)
console
.
log
(
'BaseBridge:'
,
message
)
let
object
=
handleSpecialCharacters
(
message
)
const
data
=
{
token
:
object
.
token
,
...
...
@@ -35,39 +35,39 @@ export function bridgeLogin() {
export
default
async
function
login
(
token
=
''
)
{
let
result
=
{}
if
(
token
===
''
)
{
console
.
log
(
'登录返回信息'
,
JSON
.
stringify
(
result
))
result
=
await
bridgeLogin
()
// 本地子应用
console
.
log
(
'登录返回信息'
,
JSON
.
stringify
(
result
))
}
else
{
result
.
token
=
token
}
window
.
localStorage
.
access_token
=
result
.
token
return
NoticeAndReplaceRouter
(
result
.
pushExtra
)
return
NoticeAndReplaceRouter
(
result
.
pushExtra
)
}
export
function
handleSpecialCharacters
(
jsonStr
)
{
let
obj
=
{};
if
(
jsonStr
&&
Object
.
prototype
.
toString
.
call
(
jsonStr
)
==
"[object String]"
&&
jsonStr
!=
'null'
)
{
jsonStr
=
jsonStr
.
replace
(
/
\r
/g
,
"
\\
r"
);
jsonStr
=
jsonStr
.
replace
(
/
\n
/g
,
"
\
\n
"
);
jsonStr
=
jsonStr
.
replace
(
/
\t
/g
,
"
\\
t"
);
jsonStr
=
jsonStr
.
replace
(
/
\\
/g
,
"
\\\
\"
);
jsonStr = jsonStr.replace(/
\
'/g, "
&
#
39
;
");
jsonStr = jsonStr.replace(/ /g, "
&
nbsp
;
");
jsonStr = jsonStr.replace(/</g, "
$lt
;
");
jsonStr = jsonStr.replace(/>/g, "
$gt
;
");
try{
jsonStr
=
jsonStr
.
replace
(
/
\r
/g
,
"
\\
r"
);
jsonStr
=
jsonStr
.
replace
(
/
\n
/g
,
"
\
\n
"
);
jsonStr
=
jsonStr
.
replace
(
/
\t
/g
,
"
\\
t"
);
jsonStr
=
jsonStr
.
replace
(
/
\\
/g
,
"
\\\
\"
);
jsonStr = jsonStr.replace(/
\
'/g, "
&
#
39
;
");
jsonStr = jsonStr.replace(/ /g, "
&
nbsp
;
");
jsonStr = jsonStr.replace(/</g, "
$lt
;
");
jsonStr = jsonStr.replace(/>/g, "
$gt
;
");
try {
obj = JSON.parse(jsonStr)
} catch (e) {
let jsonArr = jsonStr.split('')
let start = jsonStr.indexOf('"
project
":') + '"
project
":'.length
let end = jsonStr.indexOf('}"
', start)
jsonArr.splice(start, 1)
jsonArr.splice(end, 1)
jsonStr = jsonArr.join('')
obj = JSON.parse(jsonStr)
}catch(e){
let jsonArr=jsonStr.split('')
let start=jsonStr.indexOf('"
project
":')+'"
project
":'.length
let end=jsonStr.indexOf('}"
',start)
jsonArr.splice(start,1)
jsonArr.splice(end,1)
jsonStr=jsonArr.join('')
obj=JSON.parse(jsonStr)
// let token=jsonStr.slice(jsonStr.indexOf('
token
')+'
token
'.length+3,jsonStr.indexOf('
userId
')-3)
...
...
@@ -85,18 +85,18 @@ export function handleSpecialCharacters(jsonStr) {
}
}
return obj;
}
}
// 通知消息跳转页面
function NoticeAndReplaceRouter(message) {
if (!message || !message.path) return {};
const path = message.path.match(/#(.*)
\
?/)[1]
const query = getQuery(message.path)
query.name
=
message.workflowTaskName
query.name
=
message.workflowTaskName
console.log(path, query, '
跳转参数与地址
');
return {
path, query
}
return {
path, query
}
}
vite.config.js
View file @
5482e697
...
...
@@ -74,6 +74,7 @@ export default ({ mode }) => {
},
build
:
{
outDir
:
`dist/
${
VITE_TARGET
}
`
}
},
base
:
'./'
}
}
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