Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
SuperMan
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
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
罗超
SuperMan
Commits
62100a1c
Commit
62100a1c
authored
May 30, 2023
by
沈良进
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://gitlab.oytour.com/luochao/superman
parents
36a5af38
121761c5
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
1073 additions
and
531 deletions
+1073
-531
TeamRevenueReport.vue
...mponents/FinancialModule/ReportForm/TeamRevenueReport.vue
+3
-0
SignName.vue
src/components/SignName.vue
+205
-200
TravelContractConfirm.vue
src/components/TravelContractConfirm.vue
+1
-10
TravelControlList.vue
...components/TravelManager/TravelList/TravelControlList.vue
+8
-5
TravelControlListSale.vue
...onents/TravelManager/TravelList/TravelControlListSale.vue
+41
-8
ContractManage.vue
src/components/administrative/ContractManage.vue
+88
-6
clientConfirm.vue
src/components/clientConfirm.vue
+4
-3
TravelManager2.vue
...ts/newTravelmanager/TravelGroupControl/TravelManager2.vue
+1
-1
TravelPrice2.vue
...ents/newTravelmanager/TravelGroupControl/TravelPrice2.vue
+7
-7
rightHead.vue
src/components/public/rightHead.vue
+344
-0
ExpectedCommission.vue
src/components/sale/ExpectedCommission.vue
+1
-6
sale.vue
src/components/sale/sale.vue
+4
-234
operation.vue
src/components/temp/operation.vue
+320
-12
index.js
src/plug/index.js
+46
-39
No files found.
src/components/FinancialModule/ReportForm/TeamRevenueReport.vue
View file @
62100a1c
...
...
@@ -2130,6 +2130,9 @@ export default {
},
components
:
{},
mounted
()
{
let
STime
=
this
.
getBeforeDate
(
31
,
this
.
getBeforeDate
(
0
,
new
Date
().
Format
(
"yyyy-MM-dd"
)))
let
ETime
=
this
.
getBeforeDate
(
0
,
this
.
getBeforeDate
(
0
,
new
Date
().
Format
(
"yyyy-MM-dd"
)))
this
.
productionDate
=
[
STime
,
ETime
]
let
allH
,
allW
,
cH
,
cW
;
allH
=
document
.
documentElement
.
clientHeight
;
allW
=
document
.
documentElement
.
clientWidth
;
...
...
src/components/SignName.vue
View file @
62100a1c
<
style
scoped
>
.SignName
.CanvasDiv
{
width
:
100%
;
height
:
calc
(
100%
-
8rem
);
padding-top
:
20px
;
}
.SignName
.CanvasDiv
#canvas
{
width
:
100%
;
height
:
100%
;
}
.SignName
.dash
{
padding
:
10px
;
box-sizing
:
border-box
;
border
:
1px
dashed
#ccc
;
width
:
95%
;
height
:
98%
;
margin
:
0
auto
;
overflow
:
hidden
;
}
.SignName
.bg
{
.SignName
.CanvasDiv
{
width
:
100%
;
height
:
calc
(
100%
-
8rem
);
padding-top
:
20px
;
}
.SignName
.CanvasDiv
#canvas
{
width
:
100%
;
height
:
100%
;
}
.SignName
.dash
{
padding
:
10px
;
box-sizing
:
border-box
;
border
:
1px
dashed
#ccc
;
width
:
95%
;
height
:
98%
;
margin
:
0
auto
;
overflow
:
hidden
;
}
.SignName
.bg
{
display
:
inline-block
;
width
:
25px
;
height
:
25px
;
}
.SignName
.bg1
{
}
.SignName
.bg1
{
background-image
:
url('../assets/img/dzht/bg1.png')
;
background-size
:
132px
;
background-position
:
-1px
-2px
;
}
.SignName
.bg2
{
}
.SignName
.bg2
{
background-image
:
url('../assets/img/dzht/bg1.png')
;
background-size
:
132px
;
background-position
:
28px
-2px
;
}
.SignName
.bottom
.el-col
>
div
{
display
:
inline-flex
;
align-items
:
center
;
justify-content
:
center
;
}
.SignName
.signTc
{
position
:
fixed
;
top
:
0
;
left
:
0
;
width
:
100%
;
height
:
100%
;
background
:
rgba
(
0
,
0
,
0
,
0.5
);
z-index
:
200
;
text-align
:
center
;
}
.SignName
.signTc
.closeTc
{
position
:
relative
;
display
:
inline-block
;
width
:
60%
;
height
:
70px
;
line-height
:
70px
;
color
:
#fff
;
border
:
1px
solid
#fff
;
margin
:
0
auto
;
top
:
50%
;
font-size
:
2rem
;
}
}
.SignName
.bottom
.el-col
>
div
{
display
:
inline-flex
;
align-items
:
center
;
justify-content
:
center
;
}
.SignName
.signTc
{
position
:
fixed
;
top
:
0
;
left
:
0
;
width
:
100%
;
height
:
100%
;
background
:
rgba
(
0
,
0
,
0
,
0.5
);
z-index
:
200
;
text-align
:
center
;
}
.SignName
.signTc
.closeTc
{
position
:
relative
;
display
:
inline-block
;
width
:
60%
;
height
:
70px
;
line-height
:
70px
;
color
:
#fff
;
border
:
1px
solid
#fff
;
margin
:
0
auto
;
top
:
50%
;
font-size
:
2rem
;
}
</
style
>
<
template
>
<div
class=
"SignName"
>
<div
class=
"signTc"
v-show=
"tcStatus"
>
<span
@
click=
"tcStatus=false;"
class=
"closeTc"
>
去签字
</span>
<div
class=
"signTc"
v-show=
"tcStatus"
>
<span
@
click=
"tcStatus=false;"
class=
"closeTc"
>
去签字
</span>
</div>
<div
class=
"CliSignDiv"
style=
"height:100%;background:#fff;z-index:100"
>
<div
class=
"CanvasDiv"
>
<div
class=
"dash"
>
<div
id=
"canvas"
style=
"position:relative;top:0;"
>
</div>
</div>
</div>
<div
class=
"
CliSignDiv"
style=
"height:100%;background:#fff;z-index:100
"
>
<div
class=
"CanvasDiv"
>
<div
class=
"dash
"
>
<div
id=
"canvas"
style=
"position:relative;top:0;
"
>
<
/div
>
<div
class=
"
bottom"
style=
"text-align:center;height:80px;line-height:80px
"
>
<el-row
>
<el-col
:span=
"12
"
>
<div
style=
"width:100%;"
@
click=
"handelClearEl()
"
>
<span
style=
"font-size:3rem;color:rgb(36, 173, 229)"
class=
"iconfont icon-zhongzhi1"
></span>
<
span
style=
"font-size:2rem"
>
重置签名
</span
>
</div>
</div>
<div
class=
"bottom"
style=
"text-align:center;height:80px;line-height:80px"
>
<el-row>
<el-col
:span=
"12"
>
<div
style=
"width:100%;"
@
click=
"handelClearEl()"
>
<!--
<span
class=
"bg bg1"
></span>
-->
<span
style=
"font-size:3rem;color:rgb(36, 173, 229)"
class=
"iconfont icon-zhongzhi1"
></span>
<span
style=
"font-size:2rem"
>
重置签名
</span>
</div>
</el-col>
<el-col
:span=
"12"
>
<div
style=
"width:100%;"
@
click=
"handelSaveEl()"
>
<!--
<span
class=
"bg bg2"
></span>
-->
<span
style=
"font-size:3rem;color:rgb(36, 173, 229)"
class=
"iconfont icon-wancheng1"
></span>
<span
style=
"font-size:2rem"
>
完成签名
</span>
</div>
</el-col>
</el-row>
<!--
<input
type=
"button"
@
click=
"handelClearEl()"
class=
"CV_Btn"
value=
"清除"
/>
<input
type=
"button"
@
click=
"handelSaveEl()"
class=
"CV_Btn"
value=
"保存"
/>
-->
</el-col>
<el-col
:span=
"12"
>
<div
style=
"width:100%;"
@
click=
"handelSaveEl()"
>
<span
style=
"font-size:3rem;color:rgb(36, 173, 229)"
class=
"iconfont icon-wancheng1"
></span>
<span
style=
"font-size:2rem"
>
完成签名
</span>
</div>
</div>
</el-col>
</el-row>
</div>
</div>
</div>
</
template
>
<
script
>
import
tripBusOrderVue
from
'./busManagement/tripBusOrder.vue'
;
let
canvas
=
document
.
createElement
(
"canvas"
);
let
cxt
=
canvas
.
getContext
(
"2d"
);
export
default
{
data
()
{
return
{
tcStatus
:
false
,
import
tripBusOrderVue
from
'./busManagement/tripBusOrder.vue'
;
let
canvas
=
document
.
createElement
(
"canvas"
);
let
cxt
=
canvas
.
getContext
(
"2d"
);
export
default
{
data
()
{
return
{
tcStatus
:
false
,
linewidth
:
3
,
//线条粗细,选填
color
:
"black"
,
//线条颜色,选填
background
:
"#fff"
,
//线条背景,选填
SignInfo
:{},
msg
:{
TCID
:
0
,
orderID
:
0
SignInfo
:
{},
msg
:
{
TCID
:
0
,
orderID
:
0
,
guestId
:
0
,
},
}
}
},
created
(){
this
.
SignInfo
=
JSON
.
parse
(
sessionStorage
.
getItem
(
"SignInfo"
));
created
()
{
this
.
SignInfo
=
JSON
.
parse
(
sessionStorage
.
getItem
(
"SignInfo"
));
},
mounted
(){
this
.
msg
.
TCID
=
this
.
$route
.
query
.
TCID
;
this
.
msg
.
orderID
=
this
.
$route
.
query
.
orderID
;
this
.
getCanvas
();
document
.
getElementsByTagName
(
'body'
)[
0
].
style
=
"overscroll-behavior-y: contain;"
mounted
()
{
this
.
msg
.
TCID
=
this
.
$route
.
query
.
TCID
;
this
.
msg
.
orderID
=
this
.
$route
.
query
.
orderID
;
this
.
getCanvas
();
document
.
getElementsByTagName
(
'body'
)[
0
].
style
=
"overscroll-behavior-y: contain;"
},
beforeDestroy
()
{
document
.
getElementsByTagName
(
'body'
)[
0
].
style
=
""
document
.
getElementsByTagName
(
'body'
)[
0
].
style
=
""
},
methods
:{
getCanvas
()
{
let
el
=
document
.
getElementById
(
"canvas"
);
el
.
appendChild
(
canvas
);
canvas
.
width
=
el
.
clientWidth
;
canvas
.
height
=
el
.
clientHeight
;
cxt
.
fillStyle
=
this
.
background
;
//填充绘图的背景颜色
cxt
.
fillRect
(
0
,
0
,
canvas
.
width
,
canvas
.
height
);
//绘制“已填色”的矩形
cxt
.
strokeStyle
=
this
.
color
;
//笔触的颜色
cxt
.
lineCap
=
"round"
;
//线条末端线帽的样式
let
linewidth
=
this
.
linewidth
;
//开始绘制
canvas
.
addEventListener
(
"touchstart"
,
function
(
e
)
{
cxt
.
beginPath
();
cxt
.
lineWidth
=
linewidth
;
//当前线条的宽度,以像素计
cxt
.
moveTo
(
e
.
changedTouches
[
0
].
pageX
,
e
.
changedTouches
[
0
].
pageY
);
}.
bind
(
this
),
false
);
//绘制中
canvas
.
addEventListener
(
"touchmove"
,
function
(
e
)
{
cxt
.
lineTo
(
e
.
changedTouches
[
0
].
pageX
,
e
.
changedTouches
[
0
].
pageY
);
cxt
.
stroke
();
}.
bind
(
this
),
false
);
//结束绘制
canvas
.
addEventListener
(
"touchend"
,
function
()
{
cxt
.
closePath
();
}.
bind
(
this
),
false
);
//开始绘制
canvas
.
addEventListener
(
"mousedown"
,
function
(
e
)
{
this
.
isMouseDown
=
tripBusOrderVue
cxt
.
beginPath
();
cxt
.
lineWidth
=
linewidth
;
//当前线条的宽度,以像素计
cxt
.
moveTo
(
e
.
pageX
-
20
,
e
.
pageY
-
20
);
}.
bind
(
this
),
false
);
//绘制中
canvas
.
addEventListener
(
"mousemove"
,
function
(
e
)
{
if
(
this
.
isMouseDown
)
{
cxt
.
lineTo
(
e
.
pageX
-
20
,
e
.
pageY
-
20
);
cxt
.
stroke
();
}
}.
bind
(
this
),
false
);
//结束绘制
canvas
.
addEventListener
(
"mouseup"
,
function
()
{
this
.
isMouseDown
=
false
cxt
.
closePath
();
}.
bind
(
this
),
false
);
},
handelClearEl
()
{
cxt
.
clearRect
(
0
,
0
,
canvas
.
width
,
canvas
.
height
);
},
handelSaveEl
()
{
let
imgBase64
=
canvas
.
toDataURL
();
this
.
SignInfo
.
companySignature
=
imgBase64
;
this
.
SaveMsg
();
},
//提交数据
SaveMsg
(){
// this.apiJavaPost("/api/contract/dosaveOrUpdate",this.SignInfo,res => {
this
.
apipost
(
"travelcontract_post_UpdateCompanySignatureService"
,
this
.
SignInfo
,
res
=>
{
if
(
res
.
data
.
resultCode
===
1
)
{
this
.
Success
(
res
.
data
.
message
);
this
.
$router
.
push
({
name
:
"clientConfirm"
,
query
:
{
TCID
:
this
.
msg
.
TCID
,
orderID
:
this
.
msg
.
orderID
,
str
:
1
}})
}
else
{
this
.
Error
(
res
.
data
.
message
);
}
},
null
);
},
}
}
methods
:
{
getCanvas
()
{
let
el
=
document
.
getElementById
(
"canvas"
);
el
.
appendChild
(
canvas
);
canvas
.
width
=
el
.
clientWidth
;
canvas
.
height
=
el
.
clientHeight
;
cxt
.
fillStyle
=
this
.
background
;
//填充绘图的背景颜色
cxt
.
fillRect
(
0
,
0
,
canvas
.
width
,
canvas
.
height
);
//绘制“已填色”的矩形
cxt
.
strokeStyle
=
this
.
color
;
//笔触的颜色
cxt
.
lineCap
=
"round"
;
//线条末端线帽的样式
let
linewidth
=
this
.
linewidth
;
//开始绘制
canvas
.
addEventListener
(
"touchstart"
,
function
(
e
)
{
cxt
.
beginPath
();
cxt
.
lineWidth
=
linewidth
;
//当前线条的宽度,以像素计
cxt
.
moveTo
(
e
.
changedTouches
[
0
].
pageX
,
e
.
changedTouches
[
0
].
pageY
);
}.
bind
(
this
),
false
);
//绘制中
canvas
.
addEventListener
(
"touchmove"
,
function
(
e
)
{
cxt
.
lineTo
(
e
.
changedTouches
[
0
].
pageX
,
e
.
changedTouches
[
0
].
pageY
);
cxt
.
stroke
();
}.
bind
(
this
),
false
);
//结束绘制
canvas
.
addEventListener
(
"touchend"
,
function
()
{
cxt
.
closePath
();
}.
bind
(
this
),
false
);
//开始绘制
canvas
.
addEventListener
(
"mousedown"
,
function
(
e
)
{
this
.
isMouseDown
=
tripBusOrderVue
cxt
.
beginPath
();
cxt
.
lineWidth
=
linewidth
;
//当前线条的宽度,以像素计
cxt
.
moveTo
(
e
.
pageX
-
20
,
e
.
pageY
-
20
);
}.
bind
(
this
),
false
);
//绘制中
canvas
.
addEventListener
(
"mousemove"
,
function
(
e
)
{
if
(
this
.
isMouseDown
)
{
cxt
.
lineTo
(
e
.
pageX
-
20
,
e
.
pageY
-
20
);
cxt
.
stroke
();
}
}.
bind
(
this
),
false
);
//结束绘制
canvas
.
addEventListener
(
"mouseup"
,
function
()
{
this
.
isMouseDown
=
false
cxt
.
closePath
();
}.
bind
(
this
),
false
);
},
handelClearEl
()
{
cxt
.
clearRect
(
0
,
0
,
canvas
.
width
,
canvas
.
height
);
},
handelSaveEl
()
{
let
imgBase64
=
canvas
.
toDataURL
();
this
.
SignInfo
.
companySignature
=
imgBase64
;
this
.
SaveMsg
();
},
//提交数据
SaveMsg
()
{
this
.
apipost
(
"travelcontract_post_UpdateCompanySignatureService"
,
this
.
SignInfo
,
res
=>
{
if
(
res
.
data
.
resultCode
===
1
)
{
this
.
Success
(
res
.
data
.
message
);
this
.
$router
.
push
({
name
:
"clientConfirm"
,
query
:
{
TCID
:
this
.
msg
.
TCID
,
orderID
:
this
.
msg
.
orderID
,
str
:
1
,
guestId
:
this
.
msg
.
guestId
,
}
})
}
else
{
this
.
Error
(
res
.
data
.
message
);
}
},
null
);
},
}
}
</
script
>
\ No newline at end of file
</
script
>
src/components/TravelContractConfirm.vue
View file @
62100a1c
...
...
@@ -3681,19 +3681,10 @@
}
return
serviceCount
;
},
goUrl
()
{
sessionStorage
.
setItem
(
"SignInfo"
,
JSON
.
stringify
(
this
.
dataList
))
this
.
$router
.
push
({
name
:
"SignName"
,
query
:
{
ContractId
:
this
.
msg
.
ContractId
,
}
})
},
ChangeTab
(
num
)
{
this
.
ActiveTab
=
num
;
},
//获取数据
getList
()
{
this
.
apipost
(
...
...
src/components/TravelManager/TravelList/TravelControlList.vue
View file @
62100a1c
...
...
@@ -610,9 +610,10 @@
v-if=
"item.PriceOfferUrl"
target=
"_blank"
>
下载报价单
</a>
</span>
</p>
<p
class=
"travelnowrap"
v-if=
"item.Config_OfferId&&item.Config_OfferId>0"
>
<span
style=
"cursor:pointer;text-decoration:underline;color:blue;"
@
click=
"showDialog(item.ID, item.Config_OfferId)"
>
报价详情
</span>
<span
style=
"cursor:pointer;text-decoration:underline;color:blue;"
@
click=
"showDialog(item.ID, item.Config_OfferId)"
>
报价详情
</span>
</p>
<p
class=
"travelnowrap flex"
v-if=
"item.OfferShouPeiFee>0"
>
<span>
手配费
</span>
...
...
@@ -683,10 +684,11 @@
</div>
</el-popover>
</p>
<p
class=
"travelnowrap"
v-if=
"item.LineID==14 && item.IsOpenHotel==1"
>
<p
class=
"travelnowrap"
v-if=
"(item.LineID==14 || item.LineID==90|| item.LineID==168) && item.IsOpenHotel==1"
>
<span
style=
"color:red;font-weight:bold;"
>
※ {{$t('op.DJyiguanbi')}}.
</span>
</p>
</div>
</div>
<div
class=
"el-col"
style=
"width:190px;"
>
...
...
@@ -1061,7 +1063,8 @@
{{$t('op.HotelXJ')}}
</el-dropdown-item>
<!-- 结团 -->
<el-dropdown-item
v-if=
"item.Status==1&&Number(item.OrderGuestNum)>0"
@
click
.
native=
"OutGroup(item.TCID,2,item.TravelEndAudit)"
>
<el-dropdown-item
v-if=
"item.Status==1&&Number(item.OrderGuestNum)>0"
@
click
.
native=
"OutGroup(item.TCID,2,item.TravelEndAudit)"
>
{{$t('Operation.Op_jietuan')}}
</el-dropdown-item>
<el-dropdown-item
v-if=
"item.Status==2"
@
click
.
native=
"OutGroup(item.TCID,1,item.TravelEndAudit)"
>
...
...
src/components/TravelManager/TravelList/TravelControlListSale.vue
View file @
62100a1c
...
...
@@ -221,7 +221,7 @@
</el-checkbox-group>
</span>
</div>
<div
class=
"comSearchDiv"
>
<span>
{{
$t
(
'Airticket.Air_salesPlatform'
)
}}
</span>
<span>
...
...
@@ -482,7 +482,26 @@
{{item.OutBranchName}}
</p>
<p
class=
"travelnowrap"
v-if=
"item.Config_OfferId"
>
<span
style=
"cursor:pointer;text-decoration:underline;color:blue;"
@
click=
"showDialog(item.ID, item.Config_OfferId)"
>
报价详情
</span>
<span
style=
"cursor:pointer;text-decoration:underline;color:blue;"
@
click=
"showDialog(item.ID, item.Config_OfferId)"
>
报价详情
</span>
</p>
<p
v-if=
"(item.LineID==14 || item.LineID==90|| item.LineID==168) && item.HotelOrderListReports && item.HotelOrderListReports.length>0 "
>
<el-popover
width=
"980"
trigger=
"click"
popper-class=
"TC_HotelPop"
>
<commonHotelInfo
:HotelObj=
"item.HotelOrderListReports"
:showHotelObj=
"showHotelObj"
:TCID=
"item.TCID"
:DMCNum=
"item.DMCNum"
:TCNUM=
"item.TCNUM"
@
SetShouPeiShu=
"SetShouPeiShu(item.TCID,item.ShouPeiStatus)"
></commonHotelInfo>
<div
slot=
"reference"
>
<span
class=
"price"
style=
"cursor:pointer;text-decoration:underline;"
>
{{$t('salesModule.HotelOrder')}}
</span>
<span
style=
"color: #e95252"
>
op{{item.OpSureHouse==2 ? '已确认' : '未确认'}}{{$t('op.Fenfang')}}
</span>
</div>
</el-popover>
</p>
<p
class=
"travelnowrap"
v-if=
"(item.LineID==14 || item.LineID==90|| item.LineID==168) && item.IsOpenHotel==1"
>
<span
style=
"color:red;font-weight:bold;"
>
※ {{$t('op.DJyiguanbi')}}.
</span>
</p>
</div>
</div>
...
...
@@ -723,7 +742,8 @@
@
click
.
native=
"setUpPlat(item)"
>
{{$t('Operation.Op_shangjia')}}
</el-dropdown-item>
<el-dropdown-item
v-if=
"item.TCState==3"
@
click
.
native=
"Setshelves(item.TCID)"
>
{{$t('Operation.Op_xiajia')}}
</el-dropdown-item>
<el-dropdown-item
v-if=
"item.Status==1&&Number(item.OrderGuestNum)>0"
@
click
.
native=
"OutGroup(item.TCID,2)"
>
<el-dropdown-item
v-if=
"item.Status==1&&Number(item.OrderGuestNum)>0"
@
click
.
native=
"OutGroup(item.TCID,2)"
>
{{$t('Operation.Op_jietuan')}}
</el-dropdown-item>
<el-dropdown-item
@
click
.
native=
"goB2B(item.ConfigId)"
>
{{$t('Operation.Op_b2bView')}}
...
...
@@ -820,10 +840,12 @@
</div>
</template>
<
script
>
import
commonHotelInfo
from
"../../commonPage/commonHotelInfo.vue"
;
import
priceDialog
from
'../TravelNewQuotation/priceDialog.vue'
;
export
default
{
components
:
{
priceDialog
priceDialog
,
commonHotelInfo
,
},
data
()
{
return
{
...
...
@@ -903,7 +925,7 @@
LineIdList
:
[],
LineteamId
:
0
,
TCNUM
:
""
,
TCID
:
""
,
TCID
:
""
,
StartGroupDate
:
""
,
EndGroupDate
:
""
,
OutBranchId
:
-
1
,
...
...
@@ -937,6 +959,17 @@
//团控状态
FreePlanType
:
-
1
},
showHotelObj
:
{
showPrice
:
true
,
//是否显示价格
showPay
:
false
,
//是否显示支付方式
showZhan
:
true
,
//占房时间
showBtnList
:
false
,
//是否下载、确认按钮
ShowTaxType
:
false
,
//显示税入税别
ShowRebateRatio
:
false
,
//显示返佣比列
ShowSupplier
:
true
,
//是否显示供应商
showCaozuoTime
:
true
,
//操作时间
colspanLength
:
5
//跨行
},
remarkMsg
:
{
TCID
:
0
,
OPRemark
:
""
,
...
...
@@ -1372,7 +1405,7 @@
query
:
{
id
:
id
,
OutBranchId
:
OutBranchId
,
IsHaveAuth
:
true
,
IsHaveAuth
:
true
,
blank
:
"y"
,
tab
:
"团队收支明细"
}
...
...
@@ -1640,7 +1673,7 @@
this
.
queryMsg
=
this
.
$store
.
state
.
pageCondition
;
}
}
if
(
!
this
.
$route
.
query
.
tcmun
)
{
if
(
!
this
.
$route
.
query
.
tcmun
)
{
var
myDate
=
new
Date
();
var
nowDate
=
myDate
.
getFullYear
()
+
...
...
@@ -1650,7 +1683,7 @@
myDate
.
getDate
();
this
.
queryMsg
.
StartGroupDate
=
nowDate
;
}
if
(
this
.
queryCommonData
.
IsParentCompany
!=
1
&&
userInfo
.
RB_Branch_id
!=
49
...
...
src/components/administrative/ContractManage.vue
View file @
62100a1c
...
...
@@ -32,6 +32,48 @@
margin-left
:
0
!important
;
}
/*灰色遮罩层*/
.ContractManage
.fade
{
width
:
100%
;
height
:
100%
;
background
:
rgba
(
0
,
0
,
0
,
0.5
);
position
:
fixed
;
left
:
0
;
top
:
0
;
z-index
:
99
;
}
/*弹出层*/
.ContractManage
.qrCodeDiv
{
width
:
236px
;
height
:
275px
;
background-color
:
#fff
;
text-align
:
center
;
border
:
1px
solid
#d1d1d1
;
position
:
fixed
;
left
:
50%
;
top
:
50%
;
margin-left
:
-100px
;
margin-top
:
-118px
;
z-index
:
999
;
border-radius
:
5px
;
}
.ContractManage
.Ec_cha
{
position
:
absolute
;
cursor
:
pointer
;
right
:
-20px
;
top
:
-25px
;
width
:
30px
;
height
:
30px
;
background-color
:
#fff
;
text-align
:
center
;
border-radius
:
50%
;
line-height
:
30px
;
}
.ContractManage
.Ec_cha
:hover
{
color
:
red
;
}
</
style
>
<
template
>
...
...
@@ -189,15 +231,21 @@
<el-button
type=
"warning"
icon=
"iconfont icon-copy"
circle
@
click=
"CopyContract(item)"
style=
"padding:4px;"
>
</el-button>
</el-tooltip>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"下载"
placement=
"top-start"
v-if=
"item.Status==2||item.Status==4"
>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"下载"
placement=
"top-start"
v-if=
"item.Status==2||item.Status==4"
>
<el-button
type=
"success"
icon=
"el-icon-download"
circle
@
click=
"DownLoadContract(item)"
></el-button>
</el-tooltip>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"提交审核"
placement=
"top-start"
v-if=
"item.Status==0||item.Status==3"
>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"提交审核"
placement=
"top-start"
v-if=
"item.Status==0||item.Status==3"
>
<el-button
type=
"info"
icon=
"el-icon-upload2"
circle
@
click=
"SubmitContract(item)"
></el-button>
</el-tooltip>
<el-tooltip
class=
"item"
v-if=
"item.Status==2"
effect=
"dark"
content=
"复制链接发送给客户"
>
<
!-- <
el-tooltip class="item" v-if="item.Status==2" effect="dark" content="复制链接发送给客户">
<el-button type="info" icon="iconfont icon-copy-l" circle @click="CopyUrl(item)"
style="padding:4px;background-color:#9266f9;border-color:#9266f9;"></el-button>
</el-tooltip> -->
<el-tooltip
class=
"item"
v-if=
"item.Status==2"
effect=
"dark"
content=
"复制链接发送给客户"
>
<el-button
type=
"info"
icon=
"iconfont icon-copy-l"
circle
@
click=
"GetQrCode(item)"
style=
"padding:4px;background-color:#9266f9;border-color:#9266f9;"
></el-button>
</el-tooltip>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"取消"
placement=
"top-start"
v-if=
"item.Status==0"
>
<el-button
type=
"danger"
icon=
"el-icon-close"
circle
@
click=
"DeleteContract(item)"
></el-button>
...
...
@@ -213,6 +261,15 @@
<el-pagination
background
@
current-change=
"handleCurrentChange"
:current-page
.
sync=
"currentPage"
layout=
"total,prev, pager, next, jumper"
:page-size=
"msg.pageSize"
:total=
"total"
>
</el-pagination>
<div
class=
"fade"
v-show=
"isShowFade"
></div>
<div
class=
"qrCodeDiv"
v-show=
"isShowFade"
>
<div
style=
"margin-top:15px;"
>
请扫码签字
<br/>
【{{clickObj.T_ContractNum}}】
</div>
<div
id=
"qrcode"
style=
"margin:25px;"
ref=
"qrcode"
>
<img
class=
"WeiXinShare"
:src=
"'data:image/png;base64,'+QRCodeStr"
/>
</div>
<i
class=
"iconfont icon-cha Ec_cha"
@
click=
"isShowFade=false"
></i>
</div>
</div>
</template>
...
...
@@ -237,7 +294,7 @@
TravelAgency_DealMan
:
""
,
//经办人
C_TCNUM
:
""
,
//团号
C_ProductName
:
""
,
//线路名称
IsQueryAll
:
0
IsQueryAll
:
0
},
pickerBeginDateBefore
:
{
disabledDate
:
time
=>
{
...
...
@@ -254,7 +311,10 @@
let
startTime
=
new
Date
(
this
.
msg
.
StartDate
);
return
startTime
.
getTime
()
>=
time
.
getTime
();
}
}
},
clickObj
:{},
//当前选择的合同
isShowFade
:
false
,
//是否显示二维码图片
QRCodeStr
:
""
,
//二维码图片
};
},
mounted
()
{
...
...
@@ -303,6 +363,29 @@
);
});
},
//生成二维码
GetQrCode
(
item
)
{
let
urlObj
=
this
.
domainManager
();
let
msg
=
{
ContractId
:
item
.
ID
,
};
this
.
clickObj
=
item
;
this
.
$http
({
headers
:
{
'Content-Type'
:
'application/json'
},
method
:
'post'
,
url
:
urlObj
.
DomainUrl
+
'/api/file/GetSingleContractQrCode?'
,
data
:
{
"msg"
:
msg
}
}).
then
(
res
=>
{
if
(
res
.
data
.
resultCode
===
1
)
{
this
.
isShowFade
=
true
;
this
.
QRCodeStr
=
res
.
data
.
data
;
}
}).
catch
(
err
=>
{})
},
//复制URL
CopyUrl
(
item
)
{
var
oInput
=
document
.
createElement
(
'input'
);
...
...
@@ -322,7 +405,6 @@
this
.
goContract
(
'SingleContract'
,
0
,
'单项委托合同'
);
}
},
//下载合同
DownLoadContract
(
item
)
{
let
msg
=
{
...
...
src/components/clientConfirm.vue
View file @
62100a1c
...
...
@@ -2115,6 +2115,7 @@
query
:
{
TCID
:
this
.
msg
.
TCID
,
orderID
:
this
.
msg
.
orderID
,
guestId
:
this
.
msg
.
guestId
}
})
},
...
...
@@ -2123,7 +2124,7 @@
},
//获取数据
getList
()
{
// this.apiJavaPost("/api/contract/getContractInfo", this.msg, res => {
this
.
apipost
(
"travelcontract_post_GetContractInfoService"
,
this
.
msg
,
res
=>
{
if
(
res
.
data
.
resultCode
===
1
)
{
this
.
dataList
=
res
.
data
.
data
;
...
...
@@ -2219,7 +2220,7 @@
},
//提交数据
SaveMsg
()
{
// this.apiJavaPost("/api/contract/dosaveOrUpdate", this.dataList, res => {
this
.
apipost
(
"travelcontract_post_UpdateCompanySignatureService"
,
this
.
dataList
,
res
=>
{
if
(
res
.
data
.
resultCode
===
1
)
{
this
.
Success
(
res
.
data
.
message
);
...
...
@@ -2246,7 +2247,7 @@
this
.
getList
();
this
.
getCanvas
();
}
catch
(
error
)
{
//alert("mounted:"+error.message)
}
}
};
...
...
src/components/newTravelmanager/TravelGroupControl/TravelManager2.vue
View file @
62100a1c
...
...
@@ -50,7 +50,7 @@
:priceList=
"PriceList"
v-if=
"TeamType==0"
:PostConfig=
"PostConfig"
:modifyTcid=
"modifyTcid"
:TeamType=
"TeamType"
:CurrentUserInfo=
"CurrentUserInfo"
:IsDirect=
"PostConfig.IsDirect"
></TravelPrice>
<!--小包团-->
<TravelPrice2
ref=
"TravelPrice"
id=
"fiveAnchor"
@
headCallBack=
"getPrice"
:PostDaysTrip=
"PostDaysTrip"
<TravelPrice2
@
saveMsg=
"SaveData(1)"
ref=
"TravelPrice"
id=
"fiveAnchor"
@
headCallBack=
"getPrice"
:PostDaysTrip=
"PostDaysTrip"
v-if=
"TeamType==1"
:priceList=
"PriceList"
:PostConfig=
"PostConfig"
:modifyTcid=
"modifyTcid"
:TeamType=
"TeamType"
:CurrentUserInfo=
"CurrentUserInfo"
:IsDirect=
"PostConfig.IsDirect"
></TravelPrice2>
<!--一日游-->
...
...
src/components/newTravelmanager/TravelGroupControl/TravelPrice2.vue
View file @
62100a1c
...
...
@@ -301,7 +301,6 @@
.TphotelTable
tr
td
{
background-color
:
#fff
;
/* padding:8px 0; */
border
:
1px
solid
#d1d1d1
;
}
...
...
@@ -454,8 +453,8 @@
<el-checkbox
v-model=
"priceData.IsLessPrice"
:true-label=
"CheckedVaule"
:false-label=
"UnCheckedLessPrice"
>
{{
$t
(
'op.CanLessPrice'
)
}}
</el-checkbox>
<el-checkbox
v-model=
"priceData.IsNeedAirportShuttle"
@
change=
"IsNeedAirportShuttleChange"
:true-label=
"CheckedVaule"
:false-label=
"UnCheckedLessPrice"
>
是否需要送团
<el-checkbox
v-model=
"priceData.IsNeedAirportShuttle"
@
change=
"IsNeedAirportShuttleChange"
:
true-label=
"CheckedVaule"
:
false-label=
"UnCheckedLessPrice"
>
是否需要送团
</el-checkbox>
<template
v-if=
"CurrentUserInfo.RB_Group_id==2"
>
<input
type=
"button"
class=
"normalBtn"
:value=
"$t('op.HotelUse')"
@
click=
"outerVisible=true"
...
...
@@ -739,7 +738,8 @@
</el-input>
</el-form-item>
<el-form-item
prop=
"SendPersion"
>
<el-input
class=
"w260"
:disabled=
"!priceData.IsNeedAirportShuttle"
placeholder=
"请输入送团人"
v-model=
"priceData.SendPersion"
>
<el-input
class=
"w260"
:disabled=
"!priceData.IsNeedAirportShuttle"
placeholder=
"请输入送团人"
v-model=
"priceData.SendPersion"
>
<
template
slot=
"prepend"
>
送团人
</
template
>
</el-input>
</el-form-item>
...
...
@@ -747,10 +747,10 @@
<el-form-item>
</el-form-item>
<el-form-item>
<div
class=
"w260"
></div>
<div
class=
"w260"
></div>
</el-form-item>
<el-form-item>
<div
class=
"w260"
></div>
<div
class=
"w260"
></div>
</el-form-item>
<el-form-item
style=
"margin-top: -20px"
>
<el-input
:placeholder=
"$t('pub.pleaseImport')"
class=
"w260 ComSeat"
v-model=
"priceData.GatherTag"
>
...
...
@@ -1221,7 +1221,7 @@
},
methods
:
{
IsNeedAirportShuttleChange
()
{
if
(
!
this
.
priceData
.
IsNeedAirportShuttle
)
{
if
(
!
this
.
priceData
.
IsNeedAirportShuttle
)
{
this
.
priceData
.
SendPersion
=
''
}
},
...
...
src/components/public/rightHead.vue
0 → 100644
View file @
62100a1c
<
style
lang=
"less"
scoped
>
@import "../../assets/css/main.less";
@import "../../assets/css/home/Saleshomepage_1920.css";
.saleChartCont {
width: 100%;
height: 95%;
box-sizing: border-box;
}
.personal {
width: 100%;
height: 100%;
}
.l_title {
width: 100%;
height: 30px
}
.Sale_Share {
color: #83ACFF;
cursor: pointer;
font-size: 12px;
margin-left: 10px;
}
.ShareDisClick {
color: gray;
}
.Sale_UnlessWords {
display: inline-block;
margin: 25px 0 0 80px;
color: #E95252;
}
</
style
>
<
template
>
<div
class=
"l_top"
style=
"position: relative;"
>
<img
v-if=
"data.icon !=null && data.icon !='' "
:src=
"data.icon"
alt=
""
class=
"tx_img"
:onerror=
'defaultHeadImg'
>
<img
v-else
src=
"../../assets/img/default_head_img.jpg"
alt=
""
alt=
""
class=
"tx_img"
>
<div
class=
"p_name"
>
<span>
{{
data
.
emName
}}
</span>
<span>
{{
data
.
postName
}}
</span>
<div
@
click=
"goAnticipate(5)"
style=
"cursor: pointer;"
>
<div
v-if=
"SumPreferPrice"
style=
"padding: 2px 0 0 0;"
><a
style=
"color: #666666;font-size: 14px;font-weight: bold;"
>
{{
SumPreferPrice
}}
</a></div>
<div
style=
"font-size: 14px;color: #333333;"
v-if=
"rankingNum"
>
第
<a
style=
"color: #FF8C00;margin-left: 3px;margin-right: 3px;
font-size: 18px;font-weight: bold;"
>
{{
rankingNum
}}
</a
>
名
</div>
</div>
</div>
<div
style=
"display: flex;justify-content: space-between;"
>
<!--
<img
style=
"cursor: pointer;"
src=
"../../assets/img/jinbin@2x.png"
alt=
""
class=
"img"
@
click=
"goAnticipate(1)"
>
-->
<div
style=
"cursor: pointer;cursor: pointer;position: relative;"
class=
"royalty"
@
click=
"goAnticipate(1)"
>
<div
class=
"tc"
>
<p>
<span>
¥
</span>
<span>
{{
data
.
totalCommission
}}
</span>
</p>
<p
style=
"color: #BDBDBD;font-size: 13px;padding: 0 0 5px 0;"
>
{{
data
.
periodsName
}}
期
<el-tag
v-if=
"data.peopelBonus"
size=
"mini"
type=
"danger"
effect=
"dark"
style=
"color: #ffff;position: absolute;left: 70px;bottom: 23px;font-size: 11px;"
>
奖+
{{
data
.
peopelBonus
}}
</el-tag></p>
</div>
<div
stye=
"font-size: 16px;color: #666666;display: block;display: inline-block;"
>
<span>
出境提成
</span>
<template
v-if=
"data.comissionGeneralId>0"
>
<span
v-if=
"data.share==1"
class=
"Sale_Share"
style=
"color:#333;cursor:default;"
>
已确认
</span>
<span
v-if=
"data.share==0"
@
click=
"tichengDialog=true"
class=
"Sale_Share"
:class=
"
{'ShareDisClick':!isSubmit}">分享并确认
</span>
</
template
>
</div>
</div>
<div
style=
"border-left: 1px solid #eeeeee;width: 1px;"
>
</div>
<!-- <img style="cursor: pointer;" src="../../assets/img/jinbin@2x.png" alt="" class="img" @click="goAnticipate(2)"> -->
<div
style=
"cursor: pointer;margin-left: 0;"
class=
"royalty"
@
click=
"goAnticipate(2)"
>
<div
class=
"tc"
>
<p>
<span>
¥
</span>
<span>
{{data.gnSaleCommission}}
</span>
</p>
<p
style=
"color: #BDBDBD;font-size: 13px;padding: 0 0 5px 0;"
>
{{data.gnPeriodsName}}期
</p>
</div>
<div
stye=
"font-size: 16px;color: #666666;display: block;display: inline-block;"
>
<span>
国内提成
</span>
</div>
</div>
<div
style=
"border-left: 1px solid #eeeeee;width: 1px;"
>
</div>
<!-- <img style="cursor: pointer;" src="../../assets/img/jinbin@2x.png" alt="" class="img" @click="goAnticipate(3)"> -->
<div
style=
"cursor: pointer;margin-left: 0;"
class=
"royalty"
@
click=
"goAnticipate(3)"
>
<div
class=
"tc"
>
<p>
<span>
¥
</span>
<span>
{{data.dxSaleCommission}}
</span>
</p>
<p
style=
"color: #BDBDBD;font-size: 13px;padding: 0 0 5px 0;"
>
{{data.dxPeriodsName}}期
</p>
</div>
<div
stye=
"font-size: 16px;color: #666666;display: block;display: inline-block;"
>
<span>
历史单项提成
</span>
</div>
</div>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"预期提成"
placement=
"top"
v-if=
"pagesTitle==1"
>
<img
src=
"../../assets/img/xiaosouYQ.png"
@
click=
"goAnticipate(4)"
style=
"width: 20px;height: auto; position: absolute;right: -0;top: -13px;cursor: pointer;color: #33B3FF;"
></img>
</el-tooltip>
</div>
<!-- 分享业绩 -->
<el-dialog
custom-class=
'w500'
title=
"分享提成"
:visible
.
sync=
"tichengDialog"
center
:before-close=
"resetCommission"
>
<el-form
:model=
"shareMsg"
:rules=
"rules"
ref=
"shareMsg"
label-width=
"80px"
>
<el-form-item
label=
"个人宣言"
style=
"margin-bottom:0;"
prop=
"ShareContent"
>
<el-input
type=
"textarea"
rows=
"6"
resize=
"none"
maxlength=
"100"
v-model=
"shareMsg.ShareContent"
placeholder=
""
></el-input>
</el-form-item>
</el-form>
<span
class=
"Sale_UnlessWords"
>
不能少于10个字
</span>
<div
slot=
"footer"
class=
"dialog-footer"
>
<button
class=
"hollowFixedBtn"
@
click=
"tichengDialog=false"
>
取消
</button>
<button
class=
"normalBtn"
@
click=
"shareCommission"
>
确定
</button>
</div>
</el-dialog>
</div>
</template>
<
script
>
import
leftNav
from
'../public/leftNav.vue'
import
moment
from
'moment'
export
default
{
props
:[
'pagesTitle'
],
data
()
{
return
{
SumPreferPrice
:
0
,
rankingNum
:
0
,
type
:
1
,
defaultHeadImg
:
'this.src="'
+
require
(
"../../assets/img/default_head_img.jpg"
)
+
'"'
,
style
:
{
width
:
0
,
background
:
"#FFFFFF"
},
data
:
[],
groupdata
:
[],
screenWidth
:
0
,
zoom
:
1
,
tichengDialog
:
false
,
shareMsg
:
{
ShareContent
:
''
,
PeriodsId
:
0
,
totalCommission
:
0
},
rules
:
{
ShareContent
:
[{
required
:
true
,
message
:
'请填写个人宣言'
,
trigger
:
'blur'
}]
},
//验证重复提交
isSubmit
:
true
,
CurrentUserInfo
:
{},
EditBtn
:
false
,
PMMsg
:
{
RB_Branch_Id
:
-
1
,
RB_Department_Id
:
0
,
EnterID
:
0
,
tStartDates
:
[],
qStartDates
:
[],
GroupBy
:
"EnterID"
,
QueryType
:
0
,
},
}
},
components
:
{
leftNav
},
watch
:
{
pagesTitle
:{
handler
(
val
,
oldVal
){
this
.
pagesTitle
=
val
},
immediate
:
true
}
},
methods
:
{
settStartDates
()
{
let
nowdays
=
new
Date
()
let
Year
=
new
Date
().
getFullYear
()
let
MonthTime
=
new
Date
().
getMonth
()
+
1
let
MonthDayNum
=
new
Date
(
Year
,
12
,
0
).
getDate
();
let
date
=
Year
+
'-12-'
+
(
MonthDayNum
>
10
?
MonthDayNum
:
'0'
+
MonthDayNum
)
let
start
=
Year
+
'-01-01'
this
.
PMMsg
.
tStartDates
=
[
start
,
date
]
},
initData
()
{
let
userInfo
=
this
.
getLocalStorage
();
let
param
=
{
RB_Branch_Id
:
this
.
PMMsg
.
RB_Branch_Id
==
-
1
?
null
:
this
.
PMMsg
.
RB_Branch_Id
,
RB_Department_Id
:
this
.
PMMsg
.
RB_Department_Id
==
0
?
null
:
this
.
PMMsg
.
RB_Department_Id
,
EnterID
:
this
.
PMMsg
.
EnterID
==
0
?
null
:
this
.
PMMsg
.
EnterID
,
//Number(userInfo.EmployeeId)
QStartDate
:
this
.
PMMsg
.
tStartDates
&&
this
.
PMMsg
.
tStartDates
.
length
==
2
?
this
.
PMMsg
.
tStartDates
[
0
]
:
null
,
QEndDate
:
this
.
PMMsg
.
tStartDates
&&
this
.
PMMsg
.
tStartDates
.
length
==
2
?
this
.
PMMsg
.
tStartDates
[
1
]
:
null
,
CStartDate
:
this
.
PMMsg
.
qStartDates
&&
this
.
PMMsg
.
qStartDates
.
length
==
2
?
this
.
PMMsg
.
qStartDates
[
0
]
:
null
,
CEndDate
:
this
.
PMMsg
.
qStartDates
&&
this
.
PMMsg
.
qStartDates
.
length
==
2
?
this
.
PMMsg
.
qStartDates
[
1
]
:
null
,
GroupBy
:
this
.
PMMsg
.
GroupBy
,
QueryType
:
this
.
PMMsg
.
QueryType
,
};
if
(
!
param
.
QStartDate
)
{
param
.
QStartDate
=
"2019-01-01"
;
}
let
tableData
=
[]
this
.
apipost
(
"sellorder_get_sellvolumerankNew"
,
param
,
(
r
)
=>
{
r
.
data
.
data
.
forEach
((
x
)
=>
{
x
.
incomeVal
=
parseFloat
(
x
.
income
);
x
.
avgPrice
=
parseFloat
(
x
.
avgPrice
);
});
tableData
=
r
.
data
.
data
;
tableData
.
forEach
((
item
,
index
)
=>
{
if
(
item
.
EnterID
==
Number
(
userInfo
.
EmployeeId
)){
this
.
rankingNum
=
index
+
1
this
.
SumPreferPrice
=
item
.
SumPreferPrice
}
})
});
},
// 销售预期提成
goAnticipate
(
type
){
let
userInfo
=
this
.
getLocalStorage
();
let
name
if
(
type
==
1
){
//出境
name
=
'TradeTicketUserDetails'
}
else
if
(
type
==
2
){
//国内
name
=
'domesticCommissionUser'
}
else
if
(
type
==
3
){
//历史单项
name
=
'ServiceCommissionUser'
}
else
if
(
type
==
4
){
//预期提成
name
=
'saleExpectedCommission'
}
else
if
(
type
==
5
){
//排名
name
=
'salesVolumeRank'
this
.
$router
.
push
({
name
:
name
,
query
:
{
tStartDates
:
this
.
PMMsg
.
tStartDates
,
blank
:
'y'
}
});
}
if
(
type
!=
5
){
this
.
$router
.
push
({
name
:
name
,
query
:
{
UserId
:
Number
(
userInfo
.
EmployeeId
),
isSale
:
1
,
blank
:
'y'
}
});
}
},
//锅炉除开标点符号的字数
getFilteredNum
(
val
)
{
//var pattern=new RegExp("[`~%!@#$^=''?~!@#¥……&——‘”“'?*()(),,。.、
<>
《》\\
[
\\
]
【】\\“\\”
{}
=+-|
\
/
:;
;:
]
");
var pattern = new RegExp("
[
`~%!@#$^=''?~!@#¥……&——‘”“'?*()(),,。.、<>《》:;; +-=\\s]");
//[]内输入你要过滤的字符,这里基本包含全部的标点符号,\\是转义字符
var rs = "";
for (var i = 0; i < val.length; i++) {
rs += val.substr(i, 1).replace(pattern, '');
}
return rs
},
//确定分享业绩
shareCommission() {
if (this.shareMsg.ShareContent == '') {
this.Error('请填写个人宣言');
return;
}
let FilterNum = this.getFilteredNum(this.shareMsg.ShareContent);
if (FilterNum.length < 10) {
this.Error('字数太少了,再多说点吧!');
return;
} else {
this.shareMsg.PeriodsId = this.data.comissionGeneralId;
this.shareMsg.totalCommission = this.data.totalCommission;
if (this.isSubmit) {
this.isSubmit = false;
this.apipost('customerIndex_post_SetSellComissionGeneralSure', this.shareMsg, res => {
this.isSubmit = true;
if (res.data.resultCode == 1) {
this.Success(res.data.message);
this.iWorkbench();
this.resetCommission();
this.MsgBus.$emit('reSetMSG');
} else {
this.Error(res.data.message);
}
}, err => {})
}
}
},
//关闭重置输入框
resetCommission() {
this.tichengDialog = false;
this.shareMsg.ShareContent = ''
},
iWorkbench() {
this.apipost('customerIndex_post_GetMySelfSellInfo', {}, res => {
if (res.data.resultCode == 1) {
this.data = res.data.data;
} else {
this.$message.error(res.data.message)
}
}, err => {})
},
},
mounted() {
this.settStartDates()
this.iWorkbench() //销售个人工作台接口
// 排名
this.initData()
},
}
</
script
>
src/components/sale/ExpectedCommission.vue
View file @
62100a1c
...
...
@@ -315,9 +315,7 @@
<detailsButtom
:type=
"2"
:obj=
"commissionMsg"
:Month=
"Month"
/>
</div>
</div>
<p
style=
"padding: 0 0 10px 0;text-align: left;"
>
</p>
<p
style=
"padding: 0 0 10px 0;text-align: left;"
></p>
<div
class=
"ExpectedCommission-table"
>
<el-table
border
ref=
"multipleTable"
:data=
"isExpansion?newRlistAll:newRlist"
>
<el-table-column
width=
"80"
prop=
"RuleName"
...
...
@@ -462,9 +460,6 @@
data
()
{
return
{
isExpansion
:
false
,
detailsInfor
:{
},
CommissionJJ
:
0
,
CommissionTC
:
0
,
GNOrderNum
:
0
,
...
...
src/components/sale/sale.vue
View file @
62100a1c
...
...
@@ -53,78 +53,7 @@
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<div
class=
"el-col-div ownScrollbarStyle PersonalData_l"
>
<div
class=
"l_top"
style=
"position: relative;"
>
<img
v-if=
"data.icon !=null && data.icon !='' "
:src=
"data.icon"
alt=
""
class=
"tx_img"
:onerror=
'defaultHeadImg'
>
<img
v-else
src=
"../../assets/img/default_head_img.jpg"
alt=
""
alt=
""
class=
"tx_img"
>
<div
class=
"p_name"
>
<span>
{{
data
.
emName
}}
</span>
<span>
{{
data
.
postName
}}
</span>
<div
@
click=
"goAnticipate(5)"
style=
"cursor: pointer;"
>
<div
v-if=
"SumPreferPrice"
style=
"padding: 2px 0 0 0;"
><a
style=
"color: #666666;font-size: 14px;font-weight: bold;"
>
{{
SumPreferPrice
}}
</a></div>
<div
style=
"font-size: 14px;color: #333333;"
v-if=
"rankingNum"
>
第
<a
style=
"color: #FF8C00;margin-left: 3px;margin-right: 3px;
font-size: 18px;font-weight: bold;"
>
{{
rankingNum
}}
</a
>
名
</div>
</div>
</div>
<div
style=
"display: flex;justify-content: space-between;"
>
<!--
<img
style=
"cursor: pointer;"
src=
"../../assets/img/jinbin@2x.png"
alt=
""
class=
"img"
@
click=
"goAnticipate(1)"
>
-->
<div
style=
"cursor: pointer;cursor: pointer;position: relative;"
class=
"royalty"
@
click=
"goAnticipate(1)"
>
<div
class=
"tc"
>
<p>
<span>
¥
</span>
<span>
{{
data
.
totalCommission
}}
</span>
</p>
<p
style=
"color: #BDBDBD;font-size: 13px;padding: 0 0 5px 0;"
>
{{
data
.
periodsName
}}
期
<el-tag
v-if=
"data.peopelBonus"
size=
"mini"
type=
"danger"
effect=
"dark"
style=
"color: #ffff;position: absolute;left: 70px;bottom: 23px;font-size: 11px;"
>
奖+
{{
data
.
peopelBonus
}}
</el-tag></p>
</div>
<div
stye=
"font-size: 16px;color: #666666;display: block;display: inline-block;"
>
<span>
出境提成
</span>
<template
v-if=
"data.comissionGeneralId>0"
>
<span
v-if=
"data.share==1"
class=
"Sale_Share"
style=
"color:#333;cursor:default;"
>
已确认
</span>
<span
v-if=
"data.share==0"
@
click=
"tichengDialog=true"
class=
"Sale_Share"
:class=
"
{'ShareDisClick':!isSubmit}">分享并确认
</span>
</
template
>
</div>
</div>
<div
style=
"border-left: 1px solid #eeeeee;width: 1px;"
>
</div>
<!-- <img style="cursor: pointer;" src="../../assets/img/jinbin@2x.png" alt="" class="img" @click="goAnticipate(2)"> -->
<div
style=
"cursor: pointer;margin-left: 0;"
class=
"royalty"
@
click=
"goAnticipate(2)"
>
<div
class=
"tc"
>
<p>
<span>
¥
</span>
<span>
{{data.gnSaleCommission}}
</span>
</p>
<p
style=
"color: #BDBDBD;font-size: 13px;padding: 0 0 5px 0;"
>
{{data.gnPeriodsName}}期
</p>
</div>
<div
stye=
"font-size: 16px;color: #666666;display: block;display: inline-block;"
>
<span>
国内提成
</span>
</div>
</div>
<div
style=
"border-left: 1px solid #eeeeee;width: 1px;"
>
</div>
<!-- <img style="cursor: pointer;" src="../../assets/img/jinbin@2x.png" alt="" class="img" @click="goAnticipate(3)"> -->
<div
style=
"cursor: pointer;margin-left: 0;"
class=
"royalty"
@
click=
"goAnticipate(3)"
>
<div
class=
"tc"
>
<p>
<span>
¥
</span>
<span>
{{data.dxSaleCommission}}
</span>
</p>
<p
style=
"color: #BDBDBD;font-size: 13px;padding: 0 0 5px 0;"
>
{{data.dxPeriodsName}}期
</p>
</div>
<div
stye=
"font-size: 16px;color: #666666;display: block;display: inline-block;"
>
<span>
历史单项提成
</span>
</div>
</div>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"预期提成"
placement=
"top"
>
<img
src=
"../../assets/img/xiaosouYQ.png"
@
click=
"goAnticipate(4)"
style=
"width: 20px;height: auto; position: absolute;right: -0;top: -13px;cursor: pointer;color: #33B3FF;"
></img>
</el-tooltip>
</div>
</div>
<rightHead
:pagesTitle=
"1"
></rightHead>
<div
class=
"order"
>
<div
class=
"l_title"
>
...
...
@@ -579,32 +508,15 @@
</div>
</div>
</div>
<!-- 分享业绩 -->
<el-dialog
custom-class=
'w500'
title=
"分享提成"
:visible
.
sync=
"tichengDialog"
center
:before-close=
"resetCommission"
>
<el-form
:model=
"shareMsg"
:rules=
"rules"
ref=
"shareMsg"
label-width=
"80px"
>
<el-form-item
label=
"个人宣言"
style=
"margin-bottom:0;"
prop=
"ShareContent"
>
<el-input
type=
"textarea"
rows=
"6"
resize=
"none"
maxlength=
"100"
v-model=
"shareMsg.ShareContent"
placeholder=
""
></el-input>
</el-form-item>
</el-form>
<span
class=
"Sale_UnlessWords"
>
不能少于10个字
</span>
<div
slot=
"footer"
class=
"dialog-footer"
>
<button
class=
"hollowFixedBtn"
@
click=
"tichengDialog=false"
>
取消
</button>
<button
class=
"normalBtn"
@
click=
"shareCommission"
>
确定
</button>
</div>
</el-dialog>
</div>
</
template
>
<
script
>
import
leftNav
from
'../public/leftNav.vue'
import
rightHead
from
'../public/rightHead.vue'
import
moment
from
'moment'
export
default
{
data
()
{
return
{
SumPreferPrice
:
0
,
rankingNum
:
0
,
type
:
1
,
defaultHeadImg
:
'this.src="'
+
require
(
"../../assets/img/default_head_img.jpg"
)
+
'"'
,
style
:
{
...
...
@@ -618,12 +530,6 @@
NotDealCount
:
0
,
//
zoom
:
1
,
OrderList
:
[],
tichengDialog
:
false
,
shareMsg
:
{
ShareContent
:
''
,
PeriodsId
:
0
,
totalCommission
:
0
},
rules
:
{
ShareContent
:
[{
required
:
true
,
...
...
@@ -647,7 +553,8 @@
}
},
components
:
{
leftNav
leftNav
,
rightHead
},
watch
:
{
...
...
@@ -658,95 +565,6 @@
}
},
methods
:
{
settStartDates
()
{
let
nowdays
=
new
Date
()
let
Year
=
new
Date
().
getFullYear
()
let
MonthTime
=
new
Date
().
getMonth
()
+
1
let
MonthDayNum
=
new
Date
(
Year
,
12
,
0
).
getDate
();
let
date
=
Year
+
'-12-'
+
(
MonthDayNum
>
10
?
MonthDayNum
:
'0'
+
MonthDayNum
)
let
start
=
Year
+
'-01-01'
this
.
PMMsg
.
tStartDates
=
[
start
,
date
]
},
initData
()
{
let
userInfo
=
this
.
getLocalStorage
();
let
param
=
{
RB_Branch_Id
:
this
.
PMMsg
.
RB_Branch_Id
==
-
1
?
null
:
this
.
PMMsg
.
RB_Branch_Id
,
RB_Department_Id
:
this
.
PMMsg
.
RB_Department_Id
==
0
?
null
:
this
.
PMMsg
.
RB_Department_Id
,
EnterID
:
this
.
PMMsg
.
EnterID
==
0
?
null
:
this
.
PMMsg
.
EnterID
,
//Number(userInfo.EmployeeId)
QStartDate
:
this
.
PMMsg
.
tStartDates
&&
this
.
PMMsg
.
tStartDates
.
length
==
2
?
this
.
PMMsg
.
tStartDates
[
0
]
:
null
,
QEndDate
:
this
.
PMMsg
.
tStartDates
&&
this
.
PMMsg
.
tStartDates
.
length
==
2
?
this
.
PMMsg
.
tStartDates
[
1
]
:
null
,
CStartDate
:
this
.
PMMsg
.
qStartDates
&&
this
.
PMMsg
.
qStartDates
.
length
==
2
?
this
.
PMMsg
.
qStartDates
[
0
]
:
null
,
CEndDate
:
this
.
PMMsg
.
qStartDates
&&
this
.
PMMsg
.
qStartDates
.
length
==
2
?
this
.
PMMsg
.
qStartDates
[
1
]
:
null
,
GroupBy
:
this
.
PMMsg
.
GroupBy
,
QueryType
:
this
.
PMMsg
.
QueryType
,
};
if
(
!
param
.
QStartDate
)
{
param
.
QStartDate
=
"2019-01-01"
;
}
let
tableData
=
[]
this
.
apipost
(
"sellorder_get_sellvolumerankNew"
,
param
,
(
r
)
=>
{
r
.
data
.
data
.
forEach
((
x
)
=>
{
x
.
incomeVal
=
parseFloat
(
x
.
income
);
x
.
avgPrice
=
parseFloat
(
x
.
avgPrice
);
});
tableData
=
r
.
data
.
data
;
tableData
.
forEach
((
item
,
index
)
=>
{
if
(
item
.
EnterID
==
Number
(
userInfo
.
EmployeeId
)){
this
.
rankingNum
=
index
+
1
this
.
SumPreferPrice
=
item
.
SumPreferPrice
}
})
});
},
// 销售预期提成
goAnticipate
(
type
){
let
userInfo
=
this
.
getLocalStorage
();
let
name
if
(
type
==
1
){
name
=
'TradeTicketUserDetails'
}
else
if
(
type
==
2
){
name
=
'domesticCommissionUser'
}
else
if
(
type
==
3
){
name
=
'ServiceCommissionUser'
}
else
if
(
type
==
4
){
name
=
'saleExpectedCommission'
}
else
if
(
type
==
5
){
name
=
'salesVolumeRank'
this
.
$router
.
push
({
name
:
name
,
query
:
{
tStartDates
:
this
.
PMMsg
.
tStartDates
,
blank
:
'y'
}
});
}
if
(
type
!=
5
){
this
.
$router
.
push
({
name
:
name
,
query
:
{
UserId
:
Number
(
userInfo
.
EmployeeId
),
isSale
:
1
,
blank
:
'y'
}
});
}
},
iWorkbench
()
{
this
.
apipost
(
'customerIndex_post_GetMySelfSellInfo'
,
{},
res
=>
{
if
(
res
.
data
.
resultCode
==
1
)
{
...
...
@@ -971,51 +789,6 @@
path
:
path
})
},
//锅炉除开标点符号的字数
getFilteredNum
(
val
)
{
//var pattern=new RegExp("[`~%!@#$^=''?~!@#¥……&——‘”“'?*()(),,。.、
<>
《》\\
[
\\
]
【】\\“\\”
{}
=+-|
\
/
:;
;:
]
");
var pattern = new RegExp("
[
`~%!@#$^=''?~!@#¥……&——‘”“'?*()(),,。.、<>《》:;; +-=\\s]");
//[]内输入你要过滤的字符,这里基本包含全部的标点符号,\\是转义字符
var rs = "";
for (var i = 0; i < val.length; i++) {
rs += val.substr(i, 1).replace(pattern, '');
}
return rs
},
//确定分享业绩
shareCommission() {
if (this.shareMsg.ShareContent == '') {
this.Error('请填写个人宣言');
return;
}
let FilterNum = this.getFilteredNum(this.shareMsg.ShareContent);
if (FilterNum.length < 10) {
this.Error('字数太少了,再多说点吧!');
return;
} else {
this.shareMsg.PeriodsId = this.data.comissionGeneralId;
this.shareMsg.totalCommission = this.data.totalCommission;
if (this.isSubmit) {
this.isSubmit = false;
this.apipost('customerIndex_post_SetSellComissionGeneralSure', this.shareMsg, res => {
this.isSubmit = true;
if (res.data.resultCode == 1) {
this.Success(res.data.message);
this.iWorkbench();
this.resetCommission();
this.MsgBus.$emit('reSetMSG');
} else {
this.Error(res.data.message);
}
}, err => {})
}
}
},
//关闭重置输入框
resetCommission() {
this.tichengDialog = false;
this.shareMsg.ShareContent = ''
},
GetAuth
()
{
var
actionCode
=
this
.
$AuthCode
.
V_PersonalCenter
;
this
.
CheckUserAuth
(
actionCode
,
res
=>
{
...
...
@@ -1026,7 +799,6 @@
},
},
mounted
()
{
this.settStartDates()
this
.
GetAuth
();
this
.
CurrentUserInfo
=
this
.
getLocalStorage
();
var
w
=
document
.
documentElement
.
clientWidth
||
document
.
body
.
clientWidth
;
...
...
@@ -1042,8 +814,6 @@
this
.
iWorkbench
()
//销售个人工作台接口
this
.
grouplist
()
//销售首页小组工作台
this
.
Financial_post_GetNotDealCount
();
//待处理财务单据的个数
// 排名
this.initData()
},
}
...
...
src/components/temp/operation.vue
View file @
62100a1c
<
style
lang=
"less"
scoped
>
@import "../../assets/css/main.less";
@import "../../assets/css/cssReset.css";
/* @import "../../assets/css/cssReset.css"; */
@import "../../assets/css/home/Saleshomepage_1920.css";
.saleChartCont {
width: 100%;
height: 95%;
box-sizing: border-box;
}
.personal {
width: 100%;
height: 100%;
}
.l_title {
width: 100%;
height: 30px
}
.Sale_Share {
color: #83ACFF;
cursor: pointer;
font-size: 12px;
margin-left: 10px;
}
.ShareDisClick {
color: gray;
}
.Sale_UnlessWords {
display: inline-block;
margin: 25px 0 0 80px;
color: #E95252;
}
.title-Month{
text-align: right;
}
.headerTitle{
display: flex;
}
.headerTitle p{
font-weight: bold;
flex-wrap: nowrap;
}
.headerTitle span{
font-weight: 100;
color: red;
margin-right: 20px;
}
</
style
>
<
template
>
<div>
<leftNav></leftNav>
<div
class=
"sale_cont"
v-if=
"CurrentUserInfo.RB_Group_id==2 || EditBtn"
>
<!--
<div
class=
"Sale_menu"
>
<ul>
<template
v-for=
"(item ,index) in MonthList"
>
<li
:class=
"
{active:Month==item.Id}" @click="Month=item.Id">
{{
item
.
Name
}}
</li>
</
template
>
</ul>
</div>
-->
<div
class=
"saleChartCont"
:style=
"{zoom:zoom}"
>
<div
class=
"personal"
>
<div
class=
"PersonalData"
style=
"height: auto;margin-top: 0;background: none;"
>
<el-row
:gutter=
"20"
>
<el-col
:span=
"12"
>
<div
class=
"el-col-div ownScrollbarStyle PersonalData_l"
style=
"height: auto;background: #fff;"
>
<rightHead
:pagesTitle=
"2"
></rightHead>
</div>
</el-col>
<el-col
:span=
"12"
style=
"background: #fff;"
>
<div
class=
"el-col-div ownScrollbarStyle PersonalData_l"
style=
"height: 158px;"
>
<div
class=
"title-Month"
>
<
template
v-for=
"(item ,index) in MonthList"
>
<input
type=
"button"
:key=
"index"
:class=
"
{'normalBtn':Month==item.Id,'hollowFixedBtn':Month!=item.Id}"
:value="item.Name"
@click="clickActive(item)">
</input>
</
template
>
</div>
<div
style=
"display: flex;align-items: center; justify-content: space-between;
height: 40px;padding: 0 20px;"
>
<div
class=
"headerTitle"
>
<p>
总订单数:
<span></span></p>
<p>
总人头数:
<span></span></p>
<p>
总预期奖金:
<span>
{{CommissionJJ}}
</span></p>
<p>
总预期提成:
<span>
{{CommissionTC}}
</span></p>
</div>
</div>
</div>
</el-col>
</el-row>
</div>
</div>
</div>
</div>
</div>
</template>
<
script
>
import
leftNav
from
'../public/leftNav.vue'
import
leftNav
from
'../public/leftNav.vue'
import
rightHead
from
'../public/rightHead.vue'
export
default
{
data
(){
return
{
EditBtn
:
false
,
CurrentUserInfo
:
{},
zoom
:
1
,
CommissionJJ
:
0
,
CommissionTC
:
0
,
msg
:{
Month
:
''
},
Month
:
1
,
MonthList
:[
{
Name
:
'上月'
,
Id
:
'0'
},
{
Name
:
'当月'
,
Id
:
'1'
},
],
CommissionInfor
:{},
YearTime
:
''
,
LastMonthTime
:
''
,
MonthTime
:
''
,
commissionMsg
:{
pageIndex
:
1
,
pageSize
:
6
,
OrderId
:
""
,
//订单id
GuestId
:
0
,
//客人id
EnterId
:
0
,
//业务员id
OrderState
:
'1'
,
//订单状态
Q_IsCollect
:
"2"
,
//收款状态
StartTime
:
""
,
//报名开始日期
EndTime
:
""
,
//报名结束日期
FinishSTime
:
""
,
//完结开始时间
FinishETime
:
""
,
//完结结束时间
DepartSTime
:
""
,
//出发开始
DepartETime
:
""
,
//出发结束
TCNUM
:
""
,
//团号
ProductName
:
""
,
//商品名称
CustomerName
:
""
,
//客户名称
LureEmpId
:
0
,
//引流人员
LineId
:
0
,
//线路
TravelType
:
0
,
//跟团类型 1跟团 2当地游
OrderType
:
"0"
,
//订单类型
IsSelectCRM
:
0
,
//1来源crm
IsMyOrder
:
1
,
//1我的订单
},
isAnnualBonus
:
false
,
// 年终奖权限
}
},
components
:{
leftNav
leftNav
,
rightHead
},
methods
:{
clickActive
(
item
){
this
.
Month
=
item
.
Id
if
(
item
.
Id
==
1
){
this
.
msg
.
Month
=
this
.
Year
+
'-'
+
(
this
.
MonthTime
>
10
?
this
.
MonthTime
:
'0'
+
this
.
MonthTime
)
}
else
{
this
.
msg
.
Month
=
this
.
Year
+
'-'
+
(
this
.
LastMonthTime
>
10
?
this
.
LastMonthTime
:
'0'
+
this
.
LastMonthTime
)
}
// this.getList()
},
// 获取规则列表数据
getList
()
{
this
.
apipost
(
"sellcommission_GetTYSaleCommissionRuleList"
,
{},
res
=>
{
this
.
loading
=
false
;
if
(
res
.
data
.
resultCode
==
1
)
{
this
.
dataRuleList
=
res
.
data
.
data
[
0
];
this
.
JapaneseLine
.
CommissionRateList
=
this
.
dataRuleList
.
AwardRuleList
this
.
JapaneseProfit
.
CommissionRateList
=
this
.
dataRuleList
.
ProfitRuleList
this
.
EuropeLine
.
CommissionRateList
=
this
.
dataRuleList
.
EuropeAwardRuleList
this
.
EuropeProfit
.
CommissionRateList
=
this
.
dataRuleList
.
EuropeProfitRuleList
this
.
OtherLine
.
CommissionRateList
=
this
.
dataRuleList
.
OtherAwardRuleList
this
.
OtherProfit
.
CommissionRateList
=
this
.
dataRuleList
.
OtherProfitRuleList
this
.
AnnualBonus
.
CommissionRateList
=
this
.
dataRuleList
.
BonusRuleList
this
.
getData
()
}
else
{
this
.
Error
(
res
.
data
.
message
)
}
});
},
// 获取预期数据
getData
(){
// 日本欧洲提成
this
.
apipost
(
'sellcommission_GetTYSaleExpectCommission'
,
this
.
msg
,
res
=>
{
if
(
res
.
data
.
resultCode
==
1
)
{
let
data
=
res
.
data
.
data
this
.
CommissionInfor
=
data
;
// 日本及其他人头奖励
this
.
JapaneseLine
.
AvgLureNum
=
this
.
CommissionInfor
.
PeopleNum
?
this
.
CommissionInfor
.
PeopleNum
:
0
this
.
JapaneseLine
.
Commission
=
this
.
CommissionInfor
.
PeopleMoney
?
this
.
CommissionInfor
.
PeopleMoney
:
0
// 日本及其他提成比例
this
.
JapaneseProfit
.
AvgLureNum
=
this
.
CommissionInfor
.
JapanCommission
?
this
.
CommissionInfor
.
JapanCommission
:
0
this
.
JapaneseProfit
.
AvfOrderNum
=
this
.
CommissionInfor
.
JapanOrderNum
?
this
.
CommissionInfor
.
JapanOrderNum
:
0
this
.
JapaneseProfit
.
CommissionRate
=
this
.
CommissionInfor
.
JapanRate
?
this
.
CommissionInfor
.
JapanRate
:
0
this
.
JapaneseProfit
.
Commission
=
this
.
CommissionInfor
.
JapanCommission
?
this
.
CommissionInfor
.
JapanCommission
:
0
this
.
JapaneseProfit
.
CommissionProfit
=
this
.
CommissionInfor
.
JapanProfit
?
this
.
CommissionInfor
.
JapanProfit
:
0
// 欧洲人头奖励
this
.
EuropeLine
.
AvgLureNum
=
this
.
CommissionInfor
.
EuropePNum
?
this
.
CommissionInfor
.
EuropePNum
:
0
this
.
EuropeLine
.
Commission
=
this
.
CommissionInfor
.
EuropeMoney
?
this
.
CommissionInfor
.
EuropeMoney
:
0
// 欧洲及其他提成比例
this
.
EuropeProfit
.
AvgLureNum
=
this
.
CommissionInfor
.
EuropeCommission
?
this
.
CommissionInfor
.
EuropeCommission
:
0
this
.
EuropeProfit
.
AvfOrderNum
=
this
.
CommissionInfor
.
EuropeOrderNum
?
this
.
CommissionInfor
.
EuropeOrderNum
:
0
this
.
EuropeProfit
.
CommissionRate
=
this
.
CommissionInfor
.
EuropeRate
?
this
.
CommissionInfor
.
EuropeRate
:
0
this
.
EuropeProfit
.
Commission
=
this
.
CommissionInfor
.
EuropeCommission
?
this
.
CommissionInfor
.
EuropeCommission
:
0
this
.
EuropeProfit
.
CommissionProfit
=
this
.
CommissionInfor
.
EuropeProfit
?
this
.
CommissionInfor
.
EuropeProfit
:
0
// 其他人头奖励
this
.
OtherLine
.
AvgLureNum
=
this
.
CommissionInfor
.
OtherPNum
?
this
.
CommissionInfor
.
OtherPNum
:
0
this
.
OtherLine
.
Commission
=
this
.
CommissionInfor
.
OtherMoney
?
this
.
CommissionInfor
.
OtherMoney
:
0
// 其他提成比例
this
.
OtherProfit
.
AvgLureNum
=
this
.
CommissionInfor
.
OtherCommission
?
this
.
CommissionInfor
.
OtherCommission
:
0
this
.
OtherProfit
.
AvfOrderNum
=
this
.
CommissionInfor
.
OtherOrderNum
?
this
.
CommissionInfor
.
OtherOrderNum
:
0
this
.
OtherProfit
.
CommissionRate
=
this
.
CommissionInfor
.
OtherRate
?
this
.
CommissionInfor
.
OtherRate
:
0
this
.
OtherProfit
.
Commission
=
this
.
CommissionInfor
.
OtherCommission
?
this
.
CommissionInfor
.
OtherCommission
:
0
this
.
OtherProfit
.
CommissionProfit
=
this
.
CommissionInfor
.
OtherProfit
?
this
.
CommissionInfor
.
OtherProfit
:
0
// 年终奖
this
.
AnnualBonus
.
AvfOrderNum
=
this
.
CommissionInfor
.
BonusNum
?
this
.
CommissionInfor
.
BonusNum
:
0
this
.
AnnualBonus
.
Commission
=
this
.
CommissionInfor
.
BonusPeriods
?
this
.
CommissionInfor
.
BonusPeriods
:
0
this
.
GetGNSaleExpectCommission
()
}
else
{
this
.
Error
(
res
.
data
.
message
);
}
this
.
loading
=
false
},
err
=>
{
this
.
loading
=
false
}
);
},
GetGNSaleExpectCommission
(){
// 国内提成
this
.
apipost
(
'sellcommission_Post_GetGNSaleExpectCommission'
,
this
.
msg
,
res
=>
{
if
(
res
.
data
.
resultCode
==
1
)
{
this
.
DomesticLine
=
res
.
data
.
data
this
.
GNOrderNum
=
0
this
.
GNEopleNum
=
0
this
.
GNCommission
=
0
this
.
DomesticLine
.
Rlist
.
forEach
(
item
=>
{
this
.
GNOrderNum
+=
Number
(
item
.
OrderNum
)
this
.
GNEopleNum
+=
Number
(
item
.
PeopleNum
)
this
.
GNCommission
+=
Number
(
item
.
Commission
)
})
this
.
newRlistAll
=
[
this
.
DomesticLine
.
Rlist
[
2
],
this
.
DomesticLine
.
Rlist
[
3
],
this
.
DomesticLine
.
Rlist
[
4
],
this
.
DomesticLine
.
Rlist
[
0
],
this
.
DomesticLine
.
Rlist
[
1
]]
this
.
newRlist
=
[
this
.
DomesticLine
.
Rlist
[
2
]]
let
arr1
=
[
this
.
CommissionInfor
.
PeopleMoney
,
this
.
CommissionInfor
.
EuropeMoney
]
let
arr2
=
[
this
.
CommissionInfor
.
SalesCommission
,
this
.
CommissionInfor
.
JapanCommission
,
this
.
CommissionInfor
.
EuropeCommission
,
this
.
GNCommission
]
this
.
CommissionJJ
=
this
.
CalculatePrice
(
arr1
,
0
)
this
.
CommissionTC
=
this
.
CalculatePrice
(
arr2
,
2
)
}
})
},
GetOrderPageList
(){
this
.
commissionMsg
.
IsMyOrder
=
'1'
this
.
apipost
(
'CarSingle_post_GetGuestOrderStatisticsPageList'
,
this
.
commissionMsg
,
res
=>
{
if
(
res
.
data
.
resultCode
==
1
)
{
let
data
=
res
.
data
.
data
.
pageData
if
(
data
.
length
>
5
){
for
(
let
i
=
0
;
i
<
5
;
i
++
){
this
.
OrderList
.
push
(
data
[
i
])
}
}
else
{
this
.
OrderList
=
data
}
}
else
{
this
.
Error
(
res
.
data
.
message
);
}
this
.
loading
=
false
},
err
=>
{
this
.
loading
=
false
}
)
},
//计算总成本
CalculatePrice
(
arr1
,
num
)
{
var
CoastPrice
=
this
.
$commonUtils
.
CaluJsonArraySum2
(
arr1
,
num
);
return
CoastPrice
>
0
?
CoastPrice
:
0
},
GetAuth
()
{
var
actionCode
=
this
.
$AuthCode
.
V_PersonalCenter
;
this
.
CheckUserAuth
(
actionCode
,
res
=>
{
if
(
res
.
data
.
resultCode
==
1
&&
res
.
data
.
data
==
1
)
{
this
.
EditBtn
=
true
;
}
});
},
},
mounted
(){
this
.
GetAuth
();
this
.
CurrentUserInfo
=
this
.
getLocalStorage
();
var
w
=
document
.
documentElement
.
clientWidth
||
document
.
body
.
clientWidth
;
this
.
screenWidth
=
w
;
let
Width
=
w
-
350
this
.
zoom
=
((
Width
/
(
1920
-
350
))
*
100
).
toFixed
(
0
)
+
'%'
;
window
.
onresize
=
()
=>
{
return
(()
=>
{
window
.
screenWidth
=
document
.
body
.
clientWidth
this
.
screenWidth
=
window
.
screenWidth
})()
}
let
userInfo
=
this
.
getLocalStorage
();
// 年终奖权限 销售, 引流, 市场, 票务 , 票務,总经理,总经理
if
(
userInfo
.
PostName
.
indexOf
(
'销售'
)
||
userInfo
.
PostName
.
indexOf
(
'引流'
)
||
userInfo
.
PostName
.
indexOf
(
'市场,'
)
||
userInfo
.
PostName
.
indexOf
(
'票务'
)
||
userInfo
.
PostName
.
indexOf
(
'票務'
)
||
userInfo
.
PostName
.
indexOf
(
'总经理'
)
||
userInfo
.
PostName
.
indexOf
(
'总经理'
)){
this
.
isAnnualBonus
=
true
}
let
nowdays
=
new
Date
()
this
.
Year
=
new
Date
().
getFullYear
()
this
.
LastMonthTime
=
new
Date
().
getMonth
()
this
.
MonthTime
=
new
Date
().
getMonth
()
+
1
this
.
msg
.
Month
=
this
.
Year
+
'-'
+
(
this
.
MonthTime
>
10
?
this
.
MonthTime
:
'0'
+
this
.
MonthTime
)
this
.
MonthList
[
0
].
Name
=
this
.
MonthList
[
0
].
Name
+
'('
+
this
.
LastMonthTime
+
'月)'
this
.
MonthList
[
1
].
Name
=
this
.
MonthList
[
1
].
Name
+
'('
+
this
.
MonthTime
+
'月)'
//this.Year+'-'+(this.MonthTime>10?this.MonthTime:'0'+this.MonthTime)+'-01'//出发开始
this
.
commissionMsg
.
DepartSTime
=
this
.
getBeforeDate
(
93
,
this
.
getBeforeDate
(
0
,
new
Date
().
Format
(
"yyyy-MM-dd"
)))
var
MonthDayNum
=
new
Date
(
this
.
Year
,
this
.
MonthTime
,
0
).
getDate
();
//计算当月的天数
this
.
commissionMsg
.
DepartETime
=
this
.
Year
+
'-'
+
(
this
.
MonthTime
>
10
?
this
.
MonthTime
:
'0'
+
this
.
MonthTime
)
+
'-'
+
(
MonthDayNum
>
10
?
MonthDayNum
:
'0'
+
MonthDayNum
)
//出发结束
},
methods
:{
goUrl
(
path
,
id
)
{
this
.
$router
.
push
({
path
:
"Details"
,
query
:{
path
,
id
}
})
},
}
}
</
script
>
\ No newline at end of file
</
script
>
src/plug/index.js
View file @
62100a1c
...
...
@@ -119,9 +119,9 @@ export default {
let
lxymallUrl
=
''
;
//国内游api
let
crmUrl
=
""
;
//crm API
let
locationName
=
window
.
location
.
hostname
;
//
domainUrl = "http://192.168.10.128";
domainUrl
=
"http://192.168.10.128"
;
// domainUrl = "http://192.168.10.9:8083" // 刘东电脑
domainUrl
=
"http://192.168.10.226"
;
//
domainUrl = "http://192.168.10.226";
//domainUrl = "http://reborn.oytour.com";
let
crmLocalFileStreamDownLoadUrl
=
""
;
crmLocalFileStreamDownLoadUrl
=
locationName
.
indexOf
(
'oytour'
)
!==
-
1
?
"http://crm.oytour.com"
:
"http://testcrm.oytour.com"
;
...
...
@@ -253,7 +253,7 @@ export default {
}
//HTTP提交数据
Vue
.
prototype
.
apipost
=
function
(
cmd
,
msg
,
successCall
,
faildCall
,
isOnline
,
isTerminate
)
{
Vue
.
prototype
.
apipost
=
function
(
cmd
,
msg
,
successCall
,
faildCall
,
isOnline
,
isTerminate
)
{
if
(
this
.
$route
.
name
.
indexOf
(
'login'
)
===
-
1
&&
this
.
$route
.
name
.
indexOf
(
'clientConfirm'
)
===
-
1
&&
this
.
$route
.
name
.
indexOf
(
'confirmationOrderDownLoad'
)
===
-
1
&&
this
.
$route
.
name
.
indexOf
(
'PrintPage'
)
===
-
1
&&
this
.
$route
.
name
.
indexOf
(
'TravelContractConfirm'
)
===
-
1
&&
this
.
$route
.
name
.
indexOf
(
'ViittoContractConfirm'
)
===
-
1
&&
...
...
@@ -283,11 +283,13 @@ export default {
}
else
if
(
this
.
$route
.
path
==
"/clientConfirm"
)
{
let
TCID
=
this
.
$route
.
query
.
TCID
;
let
orderID
=
this
.
$route
.
query
.
orderID
;
let
guestId
=
this
.
$route
.
query
.
guestId
;
this
.
$router
.
push
({
name
:
"clientConfirm"
,
query
:
{
TCID
:
TCID
,
orderID
:
orderID
orderID
:
orderID
,
guestId
:
guestId
,
}
})
}
else
if
(
this
.
$route
.
path
==
"/TravelContractConfirm"
)
{
...
...
@@ -338,27 +340,30 @@ export default {
let
pending
=
[];
//声明一个数组用于存储每个请求的取消函数和axios标识
let
cancelToken
=
axios
.
CancelToken
;
let
removePending
=
(
config
)
=>
{
for
(
let
p
in
pending
)
{
if
(
pending
[
p
].
u
===
config
.
url
+
'&'
+
config
.
method
)
{
//当当前请求在数组中存在时执行函数体
pending
[
p
].
f
();
//执行取消操作
pending
.
splice
(
p
,
1
);
for
(
let
p
in
pending
)
{
if
(
pending
[
p
].
u
===
config
.
url
+
'&'
+
config
.
method
)
{
//当当前请求在数组中存在时执行函数体
pending
[
p
].
f
();
//执行取消操作
pending
.
splice
(
p
,
1
);
}
}
}
// 我的财务单防止多次请求导致数据混乱
if
(
isTerminate
>
0
)
{
if
(
isTerminate
>
0
)
{
this
.
$http
.
interceptors
.
request
.
use
(
config
=>
{
removePending
(
config
);
//在一个axios发送前执行一下取消操作
config
.
cancelToken
=
new
cancelToken
((
c
)
=>
{
// 这里的axios标识我是用请求地址&请求方式拼接的字符串,当然你可以选择其他的一些方式
pending
.
push
({
u
:
config
.
url
+
'&'
+
config
.
method
,
f
:
c
});
removePending
(
config
);
//在一个axios发送前执行一下取消操作
config
.
cancelToken
=
new
cancelToken
((
c
)
=>
{
// 这里的axios标识我是用请求地址&请求方式拼接的字符串,当然你可以选择其他的一些方式
pending
.
push
({
u
:
config
.
url
+
'&'
+
config
.
method
,
f
:
c
});
return
Promise
.
resolve
(
config
)
},
error
=>
{
});
return
Promise
.
resolve
(
config
)
},
error
=>
{
return
Promise
.
reject
(
error
)
})
})
}
this
.
$http
.
post
(
apiurl
,
postData
,
{
headers
:
{
...
...
@@ -377,8 +382,8 @@ export default {
successCall
(
res
);
}
},
faildCall
)
},
// CRM接口
...
...
@@ -445,11 +450,13 @@ export default {
}
else
if
(
this
.
$route
.
path
==
"/clientConfirm"
)
{
let
TCID
=
this
.
$route
.
query
.
TCID
;
let
orderID
=
this
.
$route
.
query
.
orderID
;
let
guestId
=
this
.
$route
.
query
.
guestId
;
this
.
$router
.
push
({
name
:
"clientConfirm"
,
query
:
{
TCID
:
TCID
,
orderID
:
orderID
orderID
:
orderID
,
guestId
:
guestId
}
})
}
else
if
(
this
.
$route
.
path
==
"/TravelContractConfirm"
)
{
...
...
@@ -1657,32 +1664,32 @@ export default {
window
.
open
(
newUrl
.
href
,
'_blank'
);
}
//验证文件格式
Vue
.
prototype
.
verificationFile
=
function
(
img
,
type
)
{
if
(
type
==
1
)
{
if
(
img
.
indexOf
(
'.DOCX'
)
!=-
1
||
img
.
indexOf
(
'.docx'
)
!=-
1
||
img
.
indexOf
(
'.DOC'
)
!=-
1
||
img
.
indexOf
(
'.doc'
)
!=-
1
||
img
.
indexOf
(
'.XLSX'
)
!=-
1
||
img
.
indexOf
(
'.xlsx'
)
!=-
1
||
img
.
indexOf
(
'.XLS'
)
!=-
1
||
img
.
indexOf
(
'.xls'
)
!=-
1
||
img
.
indexOf
(
'.PPT'
)
!=-
1
||
img
.
indexOf
(
'.ppt'
)
!=-
1
||
img
.
indexOf
(
'.PPTX'
)
!=-
1
||
img
.
indexOf
(
'.pptx'
)
!=-
1
||
img
.
indexOf
(
'.PDF'
)
!=-
1
||
img
.
indexOf
(
'.pdf'
)
!=-
1
)
{
Vue
.
prototype
.
verificationFile
=
function
(
img
,
type
)
{
if
(
type
==
1
)
{
if
(
img
.
indexOf
(
'.DOCX'
)
!=
-
1
||
img
.
indexOf
(
'.docx'
)
!=
-
1
||
img
.
indexOf
(
'.DOC'
)
!=
-
1
||
img
.
indexOf
(
'.doc'
)
!=
-
1
||
img
.
indexOf
(
'.XLSX'
)
!=
-
1
||
img
.
indexOf
(
'.xlsx'
)
!=
-
1
||
img
.
indexOf
(
'.XLS'
)
!=
-
1
||
img
.
indexOf
(
'.xls'
)
!=
-
1
||
img
.
indexOf
(
'.PPT'
)
!=
-
1
||
img
.
indexOf
(
'.ppt'
)
!=
-
1
||
img
.
indexOf
(
'.PPTX'
)
!=
-
1
||
img
.
indexOf
(
'.pptx'
)
!=
-
1
||
img
.
indexOf
(
'.PDF'
)
!=
-
1
||
img
.
indexOf
(
'.pdf'
)
!=
-
1
)
{
return
true
}
else
{
}
else
{
return
false
}
}
if
(
type
==
3
)
{
if
(
img
.
indexOf
(
'.png'
)
!=-
1
||
img
.
indexOf
(
'.PNG'
)
!=-
1
||
img
.
indexOf
(
'.GIF'
)
!=-
1
||
img
.
indexOf
(
'.gif'
)
!=-
1
||
img
.
indexOf
(
'.JPEG'
)
!=-
1
||
img
.
indexOf
(
'.jpeg'
)
!=-
1
||
img
.
indexOf
(
'.JPG'
)
!=-
1
||
img
.
indexOf
(
'.jpg'
)
!=-
1
||
img
.
indexOf
(
'.BMP'
)
!=-
1
||
img
.
indexOf
(
'.bmp'
)
!=-
1
)
{
if
(
type
==
3
)
{
if
(
img
.
indexOf
(
'.png'
)
!=
-
1
||
img
.
indexOf
(
'.PNG'
)
!=
-
1
||
img
.
indexOf
(
'.GIF'
)
!=
-
1
||
img
.
indexOf
(
'.gif'
)
!=
-
1
||
img
.
indexOf
(
'.JPEG'
)
!=
-
1
||
img
.
indexOf
(
'.jpeg'
)
!=
-
1
||
img
.
indexOf
(
'.JPG'
)
!=
-
1
||
img
.
indexOf
(
'.jpg'
)
!=
-
1
||
img
.
indexOf
(
'.BMP'
)
!=
-
1
||
img
.
indexOf
(
'.bmp'
)
!=
-
1
)
{
return
true
}
else
{
}
else
{
return
false
}
}
}
}
}
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