Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
group-buy-ui
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
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
ui
group-buy-ui
Commits
4ea34b31
Commit
4ea34b31
authored
Oct 05, 2021
by
beisir
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feat/group-buy' of git.quantgroup.cn:ui/group-buy-ui into feat/group-buy
parents
7129e4ba
4a2571cb
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
90 additions
and
90 deletions
+90
-90
App.vue
src/App.vue
+6
-4
pay.api.js
src/api/pay.api.js
+6
-2
groupShare.vue
src/components/groupShare.vue
+3
-1
sharePic.vue
src/components/sharePic.vue
+53
-52
httpDecorator.js
src/service/httpDecorator.js
+2
-3
init.service.js
src/service/init.service.js
+3
-1
utils.service.js
src/service/utils.service.js
+1
-8
module.js
src/store/module.js
+6
-0
SmsModal.vue
src/views/pay/components/SmsModal.vue
+10
-11
payWaiting.vue
src/views/pay/payWaiting.vue
+0
-8
No files found.
src/App.vue
View file @
4ea34b31
...
@@ -53,12 +53,14 @@ export default {
...
@@ -53,12 +53,14 @@ export default {
}
}
}
}
},
},
$route
()
{
$route
(
v
)
{
this
.
$nextTick
(()
=>
{
this
.
$nextTick
(()
=>
{
this
.
$refs
.
gdShare
.
shareCloseChange
();
//切换页面隐藏分享弹窗
this
.
$refs
.
gdShare
.
shareCloseChange
();
//切换页面隐藏分享弹窗
document
document
.
querySelectorAll
(
'
.cr-overlay
'
).
forEach
(
e
=>
{
.
querySelectorAll
(
'
.cr-overlay
'
)
!
e
.
parentNode
.
className
.
includes
(
'
share
'
)
&&
.
forEach
(
e
=>
!
e
.
parentNode
.
className
.
includes
(
'
share
'
)
&&
e
.
parentNode
.
removeChild
(
e
));
!
v
.
name
==
'
payWaiting
'
&&
e
.
parentNode
.
removeChild
(
e
);
});
store
.
dispatch
(
'
change_show_mini_app_guide
'
,
{
store
.
dispatch
(
'
change_show_mini_app_guide
'
,
{
bool
:
!
isApp
&&
!
isWxMp
&&
!
isWechat
?
true
:
false
,
bool
:
!
isApp
&&
!
isWxMp
&&
!
isWechat
?
true
:
false
,
pointer
:
this
pointer
:
this
...
...
src/api/pay.api.js
View file @
4ea34b31
...
@@ -84,7 +84,10 @@ export default {
...
@@ -84,7 +84,10 @@ export default {
const
getCouponList
=
function
(
params
)
{
const
getCouponList
=
function
(
params
)
{
return
request
.
get
(
`
${
talosHost
}
/api/kdsp/appconfig/pay-succ-page/guide-stream`
,
{
params
});
return
request
.
get
(
`
${
talosHost
}
/api/kdsp/appconfig/pay-succ-page/guide-stream`
,
{
params
});
};
};
// 获取用户手机号
const
getPhoneNumber
=
function
()
{
return
request
.
get
(
`
${
talosHost
}
/api/kdsp/user/phone`
);
};
export
{
export
{
pay
,
pay
,
prepay
,
prepay
,
...
@@ -98,5 +101,6 @@ export {
...
@@ -98,5 +101,6 @@ export {
kaGetNextUrl
,
kaGetNextUrl
,
getCouponList
,
getCouponList
,
queryPayStatus
,
queryPayStatus
,
reissueContract
reissueContract
,
getPhoneNumber
};
};
src/components/groupShare.vue
View file @
4ea34b31
...
@@ -67,12 +67,14 @@ export default {
...
@@ -67,12 +67,14 @@ export default {
}
}
this
.
$store
.
dispatch
(
'
change_loading
'
,
true
);
this
.
$store
.
dispatch
(
'
change_loading
'
,
true
);
this
.
type
=
type
;
this
.
type
=
type
;
// 如果shareInfo为data数据则直接创建海报
if
(
typeof
shareInfo
===
'
object
'
)
{
if
(
typeof
shareInfo
===
'
object
'
)
{
this
.
sharePicData
=
shareInfo
;
this
.
sharePicData
=
shareInfo
;
this
.
handleShareInfo
(
shareInfo
);
this
.
handleShareInfo
(
shareInfo
);
return
;
return
;
}
}
// 如果shareInfo为data数据则直接创建海报
this
.
getGroupShareInfo
(
shareInfo
);
this
.
getGroupShareInfo
(
shareInfo
);
});
});
},
},
...
...
src/components/sharePic.vue
View file @
4ea34b31
...
@@ -11,13 +11,7 @@
...
@@ -11,13 +11,7 @@
style=
"width: 94px;height: 94px;margin: 0 21px;"
style=
"width: 94px;height: 94px;margin: 0 21px;"
:class=
"
{ leader: index == 0, normal: index != 0 }"
:class=
"
{ leader: index == 0, normal: index != 0 }"
>
>
<img
<img
class=
"avator"
style=
"width: 94px; height: 94px;"
:src=
"item"
alt=
""
/>
class=
"avator"
style=
"width: 94px;
height: 94px;"
:src=
"item"
alt=
""
/>
<template
v-if=
"index == 0"
>
<template
v-if=
"index == 0"
>
<div
<div
class=
"leaderName"
class=
"leaderName"
...
@@ -92,11 +86,7 @@
...
@@ -92,11 +86,7 @@
</div>
</div>
</div>
</div>
</div>
</div>
<div
<div
class=
"skuImg"
style=
"width: 984px;height: 984px;"
>
class=
"skuImg"
style=
"width: 984px;
height: 984px;"
>
<!-- 商品图 -->
<!-- 商品图 -->
<img
:src=
"sharePicData.skuImg"
alt=
""
/>
<img
:src=
"sharePicData.skuImg"
alt=
""
/>
<div
class=
"skuInfo"
style=
"height: 134px;"
>
<div
class=
"skuInfo"
style=
"height: 134px;"
>
...
@@ -154,6 +144,7 @@ export default {
...
@@ -154,6 +144,7 @@ export default {
};
};
},
},
methods
:
{
methods
:
{
// 参团人数小于7时,头像全部显示;大于时展示6个头像...
handleAvator
(
sharePicData
)
{
handleAvator
(
sharePicData
)
{
const
openGroupCnt
=
sharePicData
.
openGroupCnt
||
7
;
const
openGroupCnt
=
sharePicData
.
openGroupCnt
||
7
;
let
peoplePhotoList
=
sharePicData
.
peoplePhotoList
||
[];
let
peoplePhotoList
=
sharePicData
.
peoplePhotoList
||
[];
...
@@ -176,29 +167,33 @@ export default {
...
@@ -176,29 +167,33 @@ export default {
}
}
return
n
;
return
n
;
},
},
async
createAndUploadPic
(
sharePicData
)
{
async
prepare
(
rawData
)
{
this
.
$store
.
dispatch
(
'
change_loading_pic
'
,
true
);
this
.
sharePicData
=
rawData
;
this
.
sharePicData
=
sharePicData
;
const
endTimeYMD
=
sharePicData
.
endTime
?
sharePicData
.
endTime
.
split
(
'
'
)[
0
]
:
''
;
this
.
handleAvator
(
rawData
);
const
endTimeHMS
=
sharePicData
.
endTime
?
sharePicData
.
endTime
.
split
(
'
'
)[
1
]
:
''
;
if
(
endTimeYMD
)
{
this
.
endTime
=
`
${
new
Date
(
endTimeYMD
).
getMonth
()
+
1
}
月
${
new
Date
(
endTimeYMD
).
getDate
()}
日
${
endTimeHMS
}
`
;
}
this
.
handleAvator
(
sharePicData
);
const
_this
=
this
;
const
[
qrcodeUrl
]
=
await
groupBuyApi
.
getQrcodeUrl
(
sharePicData
);
this
.
qrcodeUrl
=
qrcodeUrl
;
const
[
res
]
=
await
qiNiuApi
.
getQiniuToken
();
const
token
=
res
.
token
;
let
skuName
=
''
;
// 将每个字符套入行内标签,用于解决canvas fillText的不换行问题
// 将每个字符套入行内标签,用于解决canvas fillText的不换行问题
const
originSkuName
=
sharePicData
.
skuName
||
''
;
let
skuName
=
''
;
const
originSkuName
=
rawData
.
skuName
||
''
;
for
(
let
i
=
0
;
i
<
originSkuName
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
originSkuName
.
length
;
i
++
)
{
skuName
+=
`<span>
${
originSkuName
[
i
]}
</span>`
;
skuName
+=
`<span>
${
originSkuName
[
i
]}
</span>`
;
}
}
this
.
skuName
=
skuName
;
this
.
skuName
=
skuName
;
const
[
endTimeYMD
,
endTimeHMS
=
''
]
=
(
rawData
.
endTime
&&
rawData
.
endTime
.
split
(
'
'
))
||
[];
if
(
endTimeYMD
)
{
const
day
=
new
Date
(
endTimeYMD
);
this
.
endTime
=
`
${
day
.
getMonth
()
+
1
}
月
${
day
.
getDate
()}
日
${
endTimeHMS
}
`
;
}
const
[
qrcodeUrl
]
=
await
groupBuyApi
.
getQrcodeUrl
(
rawData
);
this
.
qrcodeUrl
=
qrcodeUrl
;
},
async
createAndUploadPic
(
sharePicData
)
{
this
.
$store
.
dispatch
(
'
change_loading_pic
'
,
true
);
await
this
.
prepare
(
sharePicData
);
this
.
$nextTick
(()
=>
{
this
.
$nextTick
(()
=>
{
html2canvas
(
this
.
$refs
.
sharePic
,
{
html2canvas
(
this
.
$refs
.
sharePic
,
{
width
:
1080
,
width
:
1080
,
...
@@ -206,30 +201,36 @@ export default {
...
@@ -206,30 +201,36 @@ export default {
useCORS
:
true
,
useCORS
:
true
,
scale
:
1
,
scale
:
1
,
allowTaint
:
false
allowTaint
:
false
}).
then
(
function
(
canvas
)
{
}).
then
(
canvas
=>
{
canvas
.
name
=
`
${
_this
.
randomString
}
`
.
jpeg
;
canvas
.
name
=
`
${
this
.
randomString
()}
.jpeg`
;
canvas
.
toBlob
(
canvas
.
toBlob
(
blob
=>
this
.
uploadPic
(
blob
),
'
image/jpeg
'
,
0.85
);
blob
=>
{
const
observable
=
upload
(
blob
,
null
,
token
);
const
observer
=
{
error
(
err
)
{
console
.
log
(
err
);
_this
.
$store
.
dispatch
(
'
change_loading_pic
'
,
false
);
},
complete
({
hash
})
{
const
fileLink
=
config
.
qiniuHost
+
hash
;
console
.
log
(
'
pic create success
'
,
fileLink
);
_this
.
$emit
(
'
outputPicUrl
'
,
fileLink
);
_this
.
$store
.
dispatch
(
'
change_loading_pic
'
,
false
);
}
};
observable
.
subscribe
(
observer
);
},
'
image/jpeg
'
,
0.85
);
});
});
});
});
},
// 上传海报到七牛,成功后触发outputPicUr事件,参数是七牛文件地址
async
uploadPic
(
blob
)
{
console
.
log
(
'
海报生成成功
'
);
const
[
res
]
=
await
qiNiuApi
.
getQiniuToken
();
const
token
=
(
res
&&
res
.
token
)
||
''
;
if
(
!
token
)
{
this
.
uploadErrorHandler
(
new
Error
(
'
七牛token无效
'
));
return
;
}
upload
(
blob
,
null
,
token
).
subscribe
({
complete
:
this
.
uploadSuccess
,
error
:
this
.
uploadError
});
},
uploadSuccess
({
hash
})
{
const
fileLink
=
config
.
qiniuHost
+
hash
;
console
.
log
(
'
海报上传成功
'
,
fileLink
);
this
.
$store
.
dispatch
(
'
change_loading_pic
'
,
false
);
this
.
$emit
(
'
outputPicUrl
'
,
fileLink
);
},
uploadError
(
err
)
{
console
.
error
(
'
海报上传失败
'
,
err
);
this
.
$store
.
dispatch
(
'
change_loading_pic
'
,
false
);
}
}
}
}
};
};
...
...
src/service/httpDecorator.js
View file @
4ea34b31
...
@@ -40,14 +40,13 @@ const http = new HttpRequest(
...
@@ -40,14 +40,13 @@ const http = new HttpRequest(
}
}
let
error
=
new
Error
(
msg
);
let
error
=
new
Error
(
msg
);
error
.
response
=
data
;
error
.
response
=
data
;
if
(
if
(
error
?.
response
?.
businessCode
===
'
6049
'
||
error
?.
response
?.
businessCode
===
'
6049
'
||
error
?.
response
?.
businessCode
===
'
401
'
||
error
?.
response
?.
businessCode
===
'
401
'
||
error
?.
response
?.
businessCode
===
'
0401
'
error
?.
response
?.
businessCode
===
'
0401
'
)
{
)
{
localStorage
.
remove
Item
(
'
vccToken
'
);
localStorage
.
remove
(
'
vccToken
'
);
sessionStorage
.
remove
Item
(
'
vccToken
'
);
sessionStorage
.
remove
(
'
vccToken
'
);
if
(
isApp
)
{
if
(
isApp
)
{
const
nativeBridge
=
new
Bridge
();
const
nativeBridge
=
new
Bridge
();
window
.
xyqbNativeEvent
=
function
(
res
)
{
window
.
xyqbNativeEvent
=
function
(
res
)
{
...
...
src/service/init.service.js
View file @
4ea34b31
...
@@ -13,9 +13,11 @@ export default {
...
@@ -13,9 +13,11 @@ export default {
init
:
router
=>
{
init
:
router
=>
{
router
.
beforeEach
((
to
,
from
,
next
)
=>
{
router
.
beforeEach
((
to
,
from
,
next
)
=>
{
Cookies
.
set
(
'
h
'
,
0
);
Cookies
.
set
(
'
h
'
,
0
);
if
(
!
to
.
query
.
vccToken
)
{
const
query
=
JSON
.
parse
(
JSON
.
stringify
(
to
.
query
));
if
(
Object
.
keys
(
query
).
indexOf
(
'
vccToken
'
)
==
-
1
)
{
to
.
query
.
vccToken
=
sessionStorage
.
get
(
'
vccToken
'
)
||
''
;
to
.
query
.
vccToken
=
sessionStorage
.
get
(
'
vccToken
'
)
||
''
;
}
}
// console.log(to.query, 1);
// 所有自定义路由字段在此处理
// 所有自定义路由字段在此处理
const
{
meta
}
=
to
;
const
{
meta
}
=
to
;
isWechat
&&
localStorage
.
set
(
'
vccChannel
'
,
'
159913
'
);
isWechat
&&
localStorage
.
set
(
'
vccChannel
'
,
'
159913
'
);
...
...
src/service/utils.service.js
View file @
4ea34b31
...
@@ -369,14 +369,7 @@ export function setAppTitleColor(bgcolor = '#fff') {
...
@@ -369,14 +369,7 @@ export function setAppTitleColor(bgcolor = '#fff') {
export
function
paramsParentheses
(
pointer
)
{
export
function
paramsParentheses
(
pointer
)
{
let
params
=
pointer
.
$route
.
query
;
let
params
=
pointer
.
$route
.
query
;
const
path
=
pointer
.
$route
.
path
;
const
path
=
pointer
.
$route
.
path
;
params
.
vccToken
&&
delete
params
.
vccToken
;
Object
.
keys
(
params
).
indexOf
(
'
vccToken
'
)
>
-
1
&&
delete
params
.
vccToken
;
const
paramsString
=
qs
.
stringify
(
params
);
const
paramsString
=
qs
.
stringify
(
params
);
// for (let key in params) {
// let option = `${key}=${params[key]}`;
// tempString += `$${option}`;
// }
// if (tempString.length) {
// tempString = `${config.localHost}${path}!` + tempString.slice(1);
// }
return
`
${
config
.
localHost
}${
path
}
?`
+
paramsString
;
return
`
${
config
.
localHost
}${
path
}
?`
+
paramsString
;
}
}
src/store/module.js
View file @
4ea34b31
...
@@ -107,6 +107,12 @@ const mutations = {
...
@@ -107,6 +107,12 @@ const mutations = {
confirmButtonText
:
'
打开微信小程序
'
,
confirmButtonText
:
'
打开微信小程序
'
,
onConfirm
:
()
=>
{
onConfirm
:
()
=>
{
// todo 跳转到小程序
// todo 跳转到小程序
// console.log(JSON.stringify(pointer.$route.query), 2);
// console.log(
// `url=${encodeURIComponent(
// JSON.stringify(paramsParentheses(pointer) + '&vccToken={token}')
// )}`
// );
let
getScheme
=
async
function
()
{
let
getScheme
=
async
function
()
{
const
[
res
]
=
await
groupBuy
.
getScheme
({
const
[
res
]
=
await
groupBuy
.
getScheme
({
miniUrl
:
'
pages/groupbuy/webview
'
,
miniUrl
:
'
pages/groupbuy/webview
'
,
...
...
src/views/pay/components/SmsModal.vue
View file @
4ea34b31
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
<p
class=
"sms-icon"
><cr-icon
type=
"cross"
color=
"#999999"
@
click=
"closeModal"
/></p>
<p
class=
"sms-icon"
><cr-icon
type=
"cross"
color=
"#999999"
@
click=
"closeModal"
/></p>
<p
class=
"sms-title"
>
请输入短信验证码
</p>
<p
class=
"sms-title"
>
请输入短信验证码
</p>
<p
class=
"sms-des"
>
为保证您账户安全,此笔交易需要短信验证
</p>
<p
class=
"sms-des"
>
为保证您账户安全,此笔交易需要短信验证
</p>
<p
class=
"phone"
>
已发送至
{{
getPhone
()
}}
</p>
<p
class=
"phone"
>
已发送至
{{
phoneNumber
}}
</p>
<cr-authcode-field
<cr-authcode-field
span-size=
"24px"
span-size=
"24px"
type=
"number"
type=
"number"
...
@@ -29,8 +29,7 @@
...
@@ -29,8 +29,7 @@
</
template
>
</
template
>
<
script
>
<
script
>
import
localStorage
from
'
@/service/localStorage.service
'
;
import
{
sendSms
as
sendSmsApi
,
getPhoneNumber
}
from
'
@/api/pay.api
'
;
import
{
sendSms
as
sendSmsApi
}
from
'
@/api/pay.api
'
;
export
default
{
export
default
{
props
:
{
props
:
{
value
:
{
value
:
{
...
@@ -45,7 +44,8 @@ export default {
...
@@ -45,7 +44,8 @@ export default {
return
{
return
{
send
:
false
,
send
:
false
,
time
:
60
,
time
:
60
,
timer
:
null
timer
:
null
,
phoneNumber
:
''
};
};
},
},
computed
:
{},
computed
:
{},
...
@@ -57,9 +57,9 @@ export default {
...
@@ -57,9 +57,9 @@ export default {
},
},
errorInfo
:
function
()
{}
errorInfo
:
function
()
{}
},
},
onShow
()
{},
created
()
{
onLoad
()
{},
this
.
getPhone
();
onReady
()
{
},
},
methods
:
{
methods
:
{
closeModal
()
{
closeModal
()
{
this
.
clearTimer
();
this
.
clearTimer
();
...
@@ -82,10 +82,9 @@ export default {
...
@@ -82,10 +82,9 @@ export default {
},
1000
);
},
1000
);
}
}
},
},
getPhone
()
{
async
getPhone
()
{
const
phone
=
localStorage
.
get
(
'
phoneNo
'
);
const
[
phoneNumber
]
=
await
getPhoneNumber
();
const
phoneS
=
`
${
phone
}
`
.
replace
(
/
(\d{3})\d
*
(\d{4})
/
,
'
+86 $1 **** $2
'
);
this
.
phoneNumber
=
phoneNumber
;
return
phoneS
;
},
},
clearTimer
()
{
clearTimer
()
{
clearInterval
(
this
.
timer
);
clearInterval
(
this
.
timer
);
...
...
src/views/pay/payWaiting.vue
View file @
4ea34b31
...
@@ -28,7 +28,6 @@ import { queryPayStatus } from '@/api/pay.api';
...
@@ -28,7 +28,6 @@ import { queryPayStatus } from '@/api/pay.api';
import
cookies
from
'
@/service/cookieStorage.service
'
;
import
cookies
from
'
@/service/cookieStorage.service
'
;
import
{
goUrlExtends
}
from
'
./extends
'
;
import
{
goUrlExtends
}
from
'
./extends
'
;
import
{
isApp
}
from
'
@/service/validation.service
'
;
import
{
isApp
}
from
'
@/service/validation.service
'
;
import
localStorage
from
'
@/service/localStorage.service
'
;
export
default
{
export
default
{
components
:
{},
components
:
{},
extends
:
goUrlExtends
,
extends
:
goUrlExtends
,
...
@@ -52,7 +51,6 @@ export default {
...
@@ -52,7 +51,6 @@ export default {
}
}
},
},
mounted
()
{
mounted
()
{
this
.
getQuery
();
this
.
$dialog
({
this
.
$dialog
({
message
:
'
请确认订单已完成支付
'
,
message
:
'
请确认订单已完成支付
'
,
confirmButtonText
:
'
已完成支付
'
,
confirmButtonText
:
'
已完成支付
'
,
...
@@ -74,12 +72,6 @@ export default {
...
@@ -74,12 +72,6 @@ export default {
navigateBack
()
{
navigateBack
()
{
this
.
$router
.
replace
({
name
:
'
orderList
'
,
params
:
{
status
:
0
}
});
this
.
$router
.
replace
({
name
:
'
orderList
'
,
params
:
{
status
:
0
}
});
},
},
getQuery
()
{
this
.
returnUrl
=
cookies
.
get
(
'
returnUrl
'
)
||
''
;
if
(
localStorage
.
get
(
'
hideOrder
'
))
{
this
.
isOrder
=
false
;
}
},
loop
()
{
loop
()
{
this
.
query
();
this
.
query
();
this
.
timer
=
setInterval
(()
=>
{
this
.
timer
=
setInterval
(()
=>
{
...
...
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