Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
J
jz_Travel
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
zhengke
jz_Travel
Commits
6c4aac46
Commit
6c4aac46
authored
Jul 23, 2025
by
黄奎
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
11
parent
72f18976
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
243 additions
and
218 deletions
+243
-218
QRCode.vue
pages/teamLeader/components/QRCode.vue
+217
-207
itineraryDetails.vue
pages/teamLeader/itineraryDetails.vue
+1
-6
reimbursementInfor.vue
pages/teamLeader/reimbursementInfor.vue
+13
-5
utils.js
plugin/utils.js
+12
-0
No files found.
pages/teamLeader/components/QRCode.vue
View file @
6c4aac46
<
style
lang=
"scss"
scoped
>
@import
url("@/asset/css/flex.css")
;
.orcodeBox
{
background
:
#fff
;
border-radius
:
8rpx
;
.orcodeBox
{
background
:
#fff
;
border-radius
:
8rpx
;
position
:
relative
;
z-index
:
2
;
}
.Title
{
}
.orcodeImg
image
{
width
:
500rpx
;
height
:
500rpx
;
}
.SureBox
{
font-size
:
28rpx
;
border-top
:
1px
solid
#F2F2F2
;
}
.SureBox
view
:last-child
{
color
:
#295EEB
;
}
.SureBox
view
:first-child
{
border-right
:
1px
solid
#ddd
;
color
:
#8C8C8C
;
}
}
.Title
{}
.orcodeImg
image
{
width
:
500rpx
;
height
:
500rpx
;
}
.SureBox
{
font-size
:
28rpx
;
border-top
:
1px
solid
#F2F2F2
;
}
.SureBox
view
:last-child
{
color
:
#295EEB
;
}
.SureBox
view
:first-child
{
border-right
:
1px
solid
#ddd
;
color
:
#8C8C8C
;
}
.swiper
{
height
:
500rpx
;
}
.swiper-item
{
display
:
block
;
height
:
500rpx
;
}
.swiper-list
{
margin-top
:
40rpx
;
margin-bottom
:
0
;
}
.sty-box
{
width
:
500rpx
;
height
:
500rpx
;
}
</
style
>
<
template
>
<view>
<u-popup
mode=
"center"
border-radius=
"20"
:popup=
"false"
v-model=
"currencyVisible"
:maskCloseAble=
"true"
length=
"80%"
:safeAreaInsetBottom=
"true"
@
close=
"close"
:z-index=
"9999"
>
<view>
<u-popup
mode=
"center"
border-radius=
"20"
:popup=
"false"
v-model=
"currencyVisible"
:maskCloseAble=
"true"
length=
"80%"
:safeAreaInsetBottom=
"true"
@
close=
"close"
:z-index=
"9999"
>
<view
class=
"orcodeBox"
>
<view
class=
"Title PY30 color000 column justify-center items-center"
>
<text
class=
"fz28"
>
领队小程序码(
{{
current
+
1
}}
/
{{
list
.
length
}}
)
</text>
<text
class=
"fz24"
>
{{
list
[
current
].
TCNUMS
}}
</text>
</view>
<view
class=
"orcodeImg row items-center justify-center PX40"
>
<swiper
:indicator-dots=
"false"
circular
style=
"height:500rpx;width:500rpx"
:current=
"current"
@
change=
"changeHandler"
>
<swiper
:indicator-dots=
"false"
circular
style=
"height:500rpx;width:500rpx"
:current=
"current"
@
change=
"changeHandler"
>
<swiper-item
v-for=
"(item, index) in list"
:key=
"index"
>
<canvas
:canvas-id=
"`firstCanvas_$
{index}`" class="sty-box"
@error="(e)=>canvasIdErrorCallback(e,index)">
</canvas>
<!--
<image
mode=
"aspectFit"
:src=
"item.Url"
/>
-->
@error="(e)=>canvasIdErrorCallback(e,index)">
</canvas>
</swiper-item>
</swiper>
<!--
<img
:src=
"list[0].Url"
/>
-->
<!--
<image
:src=
"list[0].Url"
style=
"width: 500rpx;height: 500rpx;"
/>
-->
</view>
<view
class=
"SureBox row MT40"
>
<view
class=
"flex1 PY20 text-center"
@
click=
"close"
>
取消
</view>
<view
class=
"flex1 PY20 text-center"
@
click=
"preservation"
>
保存
</view>
</view>
</view>
</u-popup>
</view>
</view>
</
template
>
<
script
>
export
default
{
props
:[
'TCIDs'
],
data
()
{
return
{
currencyVisible
:
false
,
list
:
[],
current
:
0
,
indicatorDots
:
true
,
autoplay
:
true
,
interval
:
2000
,
duration
:
500
,
BaseInfo
:
[],
TCIDsList
:
[]
}
},
watch
:
{
TCIDs
:{
handler
(
newVal
,
oldVal
){
this
.
list
=
[]
this
.
getTem
(
newVal
)
},
deep
:
false
,
immediate
:
true
,
}
},
mounted
()
{
},
methods
:
{
changeHandler
(
i
)
{
this
.
current
=
i
.
detail
.
current
;
},
getTem
(
TCIDs
){
uni
.
showLoading
({
title
:
"正在生成"
,
});
this
.
apipost
(
"dmcstatistics_post_GetExtendLeaderAllStatics"
,{
TCIDs
:
TCIDs
,
NewCombinationNum
:
''
},
(
res
)
=>
{
if
(
res
.
resultCode
==
1
)
{
this
.
BaseInfo
=
res
.
data
.
BaseInfo
this
.
TCIDsList
=
this
.
TCIDs
.
split
(
','
)
this
.
TCIDsList
.
forEach
((
x
,
index
)
=>
{
this
.
init
(
x
)
});
}
})
export
default
{
props
:
[
'TCIDs'
],
data
()
{
return
{
currencyVisible
:
false
,
list
:
[],
current
:
0
,
indicatorDots
:
true
,
autoplay
:
true
,
interval
:
2000
,
duration
:
500
,
BaseInfo
:
[],
TCIDsList
:
[]
}
},
async
init
(
x
){
await
this
.
apipostQrCode
(
""
,
{
TCID
:
x
},
(
res
)
=>
{
if
(
res
.
resultCode
==
1
)
{
let
findIndex
=
this
.
BaseInfo
.
findIndex
(
item
=>
item
.
TCIDS
==
x
)
this
.
list
.
push
({
Url
:
'data:image/png;base64,'
+
res
.
data
,
TCID
:
x
,
TCNUMS
:
this
.
BaseInfo
[
findIndex
].
TCNUMS
})
if
(
this
.
list
.
length
==
this
.
TCIDsList
.
length
)
{
this
.
currencyVisible
=
true
this
.
list
.
forEach
((
x
,
i
)
=>
{
this
.
drawCtx
(
i
)
})
}
// uni.hideLoading()
}
})
watch
:
{
TCIDs
:
{
handler
(
newVal
,
oldVal
)
{
this
.
list
=
[]
this
.
getTem
(
newVal
)
},
deep
:
false
,
immediate
:
true
,
}
},
close
(){
this
.
currencyVisible
=
false
this
.
$emit
(
'close'
)
},
drawCtx
(
i
)
{
let
ctx
=
uni
.
createCanvasContext
(
`firstCanvas_
${
i
}
`
,
this
);
let
that
=
this
;
ctx
.
drawImage
(
that
.
list
[
i
].
Url
,
0
,
0
,
250
,
250
);
//绘制图
that
.
drawQrCode
(
ctx
)
mounted
()
{
},
drawQrCode
(
ctx
)
{
let
that
=
this
;
setTimeout
(()
=>
{
ctx
.
draw
(
false
,
()
=>
{
uni
.
canvasToTempFilePath
({
x
:
0
,
y
:
0
,
width
:
750
,
height
:
1344
,
destWidth
:
750.0
,
destHeight
:
1344.0
,
canvasId
:
"firstCanvas"
,
success
:
(
res
)
=>
{
uni
.
hideLoading
();
// that.tempPic = res.tempFilePath;
},
fail
(
e
)
{
uni
.
hideLoading
();
console
.
log
(
e
);
},
},
that
);
methods
:
{
changeHandler
(
i
)
{
this
.
current
=
i
.
detail
.
current
;
},
getTem
(
TCIDs
)
{
uni
.
showLoading
({
title
:
"正在生成"
,
});
},
200
)
}
,
preservation
(){
let
that
=
this
;
uni
.
canvasToTempFilePath
(
{
canvasId
:
`firstCanvas_
${
that
.
current
}
`
,
success
:
(
res
)
=>
{
uni
.
showLoading
(
{
t
itle
:
"正在保存"
,
this
.
apipost
(
"dmcstatistics_post_GetExtendLeaderAllStatics"
,
{
TCIDs
:
TCIDs
,
NewCombinationNum
:
''
},
(
res
)
=>
{
if
(
res
.
resultCode
==
1
)
{
this
.
BaseInfo
=
res
.
data
.
BaseInfo
this
.
TCIDsList
=
this
.
TCIDs
.
split
(
','
)
this
.
TCIDsList
.
forEach
((
x
,
index
)
=>
{
t
his
.
init
(
x
)
});
uni
.
saveImageToPhotosAlbum
({
filePath
:
res
.
tempFilePath
,
success
:
function
()
{
uni
.
showToast
({
title
:
"保存成功"
,
});
}
})
},
async
init
(
x
)
{
await
this
.
apipostQrCode
(
""
,
{
TCID
:
x
},
(
res
)
=>
{
if
(
res
.
resultCode
==
1
)
{
let
findIndex
=
this
.
BaseInfo
.
findIndex
(
item
=>
item
.
TCIDS
==
x
)
this
.
list
.
push
({
Url
:
'data:image/png;base64,'
+
res
.
data
,
TCID
:
x
,
TCNUMS
:
this
.
BaseInfo
[
findIndex
].
TCNUMS
})
if
(
this
.
list
.
length
==
this
.
TCIDsList
.
length
)
{
this
.
currencyVisible
=
true
this
.
list
.
forEach
((
x
,
i
)
=>
{
this
.
drawCtx
(
i
)
})
}
}
})
},
close
()
{
this
.
currencyVisible
=
false
this
.
$emit
(
'close'
)
},
drawCtx
(
i
)
{
let
ctx
=
uni
.
createCanvasContext
(
`firstCanvas_
${
i
}
`
,
this
);
let
that
=
this
;
ctx
.
drawImage
(
that
.
list
[
i
].
Url
,
0
,
0
,
250
,
250
);
//绘制图
that
.
drawQrCode
(
ctx
)
},
drawQrCode
(
ctx
)
{
let
that
=
this
;
setTimeout
(()
=>
{
ctx
.
draw
(
false
,
()
=>
{
uni
.
canvasToTempFilePath
({
x
:
0
,
y
:
0
,
width
:
750
,
height
:
1344
,
destWidth
:
750.0
,
destHeight
:
1344.0
,
canvasId
:
"firstCanvas"
,
success
:
(
res
)
=>
{
uni
.
hideLoading
();
// that.tempPic = res.tempFilePath;
},
fail
(
e
)
{
uni
.
hideLoading
();
console
.
log
(
e
);
},
},
fail
:
function
(
err
)
{
if
(
err
.
errMsg
===
"saveImageToPhotosAlbum:fail auth deny"
)
{
uni
.
authorize
({
scope
:
'scope.writePhotosAlbum'
,
success
:
(
res
)
=>
{
},
fail
:
(
res
)
=>
{
uni
.
showModal
({
content
:
'检测到您没打开保存到相册权限,是否去设置打开?'
,
confirmText
:
"确认"
,
cancelText
:
'取消'
,
success
:
(
res
)
=>
{
if
(
res
.
confirm
)
{
uni
.
openSetting
({
success
:
(
res
)
=>
{
console
.
log
(
res
);
if
(
res
.
authSetting
[
'scope.writePhotosAlbum'
])
{
that
.
preservation
()
that
);
});
},
200
)
},
preservation
()
{
let
that
=
this
;
uni
.
canvasToTempFilePath
({
canvasId
:
`firstCanvas_
${
that
.
current
}
`
,
success
:
(
res
)
=>
{
uni
.
showLoading
({
title
:
"正在保存"
,
});
uni
.
saveImageToPhotosAlbum
({
filePath
:
res
.
tempFilePath
,
success
:
function
()
{
uni
.
showToast
({
title
:
"保存成功"
,
});
},
fail
:
function
(
err
)
{
if
(
err
.
errMsg
===
"saveImageToPhotosAlbum:fail auth deny"
)
{
uni
.
authorize
({
scope
:
'scope.writePhotosAlbum'
,
success
:
(
res
)
=>
{
},
fail
:
(
res
)
=>
{
uni
.
showModal
({
content
:
'检测到您没打开保存到相册权限,是否去设置打开?'
,
confirmText
:
"确认"
,
cancelText
:
'取消'
,
success
:
(
res
)
=>
{
if
(
res
.
confirm
)
{
uni
.
openSetting
({
success
:
(
res
)
=>
{
console
.
log
(
res
);
if
(
res
.
authSetting
[
'scope.writePhotosAlbum'
]
)
{
that
.
preservation
()
}
}
}
}
)
}
else
{
console
.
log
(
'取消'
);
}
)
}
else
{
console
.
log
(
'取消'
);
}
}
}
}
)
}
}
)
}
else
{
uni
.
showToast
({
title
:
'保存失败,请稍后重试
'
,
icon
:
'none'
,
duration
:
2000
}
)
}
},
complete
:
function
()
{
uni
.
hideLoading
();
}
,
}
);
},
fail
:
function
(
e
)
{
console
.
log
(
e
);
uni
.
showToast
({
title
:
'生成失败,请稍后重试
'
,
icon
:
'none'
,
duration
:
2000
}
)
}
)
}
}
)
}
else
{
uni
.
showToast
(
{
title
:
'保存失败,请稍后重试'
,
icon
:
'none
'
,
duration
:
2000
})
}
}
,
complete
:
function
()
{
uni
.
hideLoading
();
},
}
);
}
,
fail
:
function
(
e
)
{
console
.
log
(
e
);
uni
.
showToast
({
title
:
'生成失败,请稍后重试'
,
icon
:
'none
'
,
duration
:
2000
})
}
,
},
},
this
);
},
canvasIdErrorCallback
:
function
(
e
,
index
)
{
console
.
error
(
e
.
detail
.
errMsg
,
'---index'
,
index
);
this
);
},
canvasIdErrorCallback
:
function
(
e
,
index
)
{
console
.
error
(
e
.
detail
.
errMsg
,
'---index'
,
index
);
}
}
}
}
}
</
script
>
\ No newline at end of file
pages/teamLeader/itineraryDetails.vue
View file @
6c4aac46
...
...
@@ -143,12 +143,6 @@
<u-icon
class=
"backIcon"
name=
"arrow-left"
size=
"32"
color=
"#FFF"
></u-icon>
</view>
</view>
<!--
<view
@
click=
"goback"
:style=
"[titleStyle,
{ opacity: '100% !important' }]"
style="position: fixed; top: 0; right: 200rpx; padding-right: 6rpx">
<view
class=
"backBox text-center"
>
<img
src=
"https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Upload/Goods/638762515984923148.png"
/>
</view>
</view>
-->
<view
class=
"detailsType fz24"
>
{{
dataList
.
teamType
==
0
?
'跟团游'
:
dataList
.
teamType
==
1
?
'小包团'
:
'一日游'
}}
</view>
</view>
<view
class=
"itiner-title"
:style=
"[titleStyle]"
>
...
...
@@ -655,6 +649,7 @@
this
.
priceList
=
res
.
data
.
priceList
this
.
formatDay
()
}
uni
.
hideLoading
();
}
,
(
failed
)
=>
{
uni
.
hideLoading
()
uni
.
showToast
({
...
...
pages/teamLeader/reimbursementInfor.vue
View file @
6c4aac46
...
...
@@ -341,30 +341,38 @@
VerificationBusList
()
{
let
msg
=
''
for
(
let
i
=
0
;
i
<
this
.
params
.
BusList
.
length
;
i
++
)
{
let
obj
=
this
.
params
.
BusList
[
i
]
let
obj
=
this
.
params
.
BusList
[
i
];
console
.
log
(
"bus_obj"
,
obj
);
for
(
let
j
=
0
;
j
<
obj
.
ReimburseList
.
ReimburseDetailsList
.
length
;
j
++
)
{
let
child
=
obj
.
ReimburseList
.
ReimburseDetailsList
[
j
]
let
child
=
obj
.
ReimburseList
.
ReimburseDetailsList
[
j
];
if
(
!
this
.
$utils
.
checkIsNum
(
child
.
UserNum
))
{
child
.
UserNum
=
0
;
}
if
(
!
this
.
$utils
.
checkIsNum
(
child
.
UnitPrice
))
{
child
.
UnitPrice
=
0
;
}
if
(
msg
==
''
&&
(
obj
.
ReimburseList
.
CurrencyId
==
0
||
obj
.
ReimburseList
.
CurrencyId
==
null
)
&&
(
obj
.
ReimburseList
.
SettlementType
>
0
||
obj
.
ReimburseList
.
Remarks
!=
''
||
obj
.
ReimburseList
.
VoucherPicList
.
length
>
0
||
child
.
StartPlace
!=
''
||
child
.
EndPlace
!=
''
||
child
.
UserNum
>
0
||
child
.
UnitPrice
>
0
||
child
.
UserType
)
)
{
msg
=
`请选择
车辆币种`
msg
=
`请选择
[`
+
obj
.
UseTime
+
`]车辆币种`
;
}
if
(
msg
==
''
&&
child
.
StartPlace
==
''
&&
(
obj
.
ReimburseList
.
SettlementType
>
0
||
obj
.
ReimburseList
.
Remarks
!=
''
||
obj
.
ReimburseList
.
VoucherPicList
.
length
>
0
||
obj
.
ReimburseList
.
CurrencyId
||
child
.
EndPlace
!=
''
||
child
.
UserNum
>
0
||
child
.
UnitPrice
>
0
||
child
.
UserType
)
)
{
msg
=
`请输入车辆出发地`
msg
=
`请输入
[`
+
obj
.
UseTime
+
`]
车辆出发地`
}
if
(
msg
==
''
&&
child
.
EndPlace
==
''
&&
(
obj
.
ReimburseList
.
SettlementType
>
0
||
obj
.
ReimburseList
.
Remarks
!=
''
||
obj
.
ReimburseList
.
VoucherPicList
.
length
>
0
||
child
.
StartPlace
!=
''
||
obj
.
ReimburseList
.
CurrencyId
||
child
.
UserNum
>
0
||
child
.
UnitPrice
>
0
||
child
.
UserType
)
)
{
msg
=
`请输入车辆目的地`
msg
=
`请输入
[`
+
obj
.
UseTime
+
`]
车辆目的地`
}
}
}
...
...
plugin/utils.js
View file @
6c4aac46
...
...
@@ -274,6 +274,17 @@ function checkInteger(value, isMinus) {
return
newValue
;
}
//判断是否为整数,小数,支持负数
function
checkIsNum
(
str
)
{
var
flag
=
false
;
if
(
!
str
)
{
str
=
''
;
}
flag
=
/^-
?(\d
*.
)?\d
+$/
.
test
(
str
);
console
.
log
(
"checkIsNum"
,
str
+
'_'
+
flag
);
return
flag
;
}
export
default
{
calcContentHeight
,
SystemInfo
,
...
...
@@ -289,4 +300,5 @@ export default {
goZanYangUrl
,
checkInteger
,
checkPrice
,
checkIsNum
,
}
\ 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