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
71ca7eef
Commit
71ca7eef
authored
Aug 18, 2025
by
吴春
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
1fea9227
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
1536 additions
and
5 deletions
+1536
-5
VisaProductOrder.vue
src/components/SalesVisa/components/VisaProductOrder.vue
+30
-1
addConfig.js
src/components/SalesVisa/components/addConfig.js
+12
-0
cruiseShipInfo.vue
src/components/SalesVisa/components/cruiseShipInfo.vue
+1441
-0
visaOrderList.vue
src/components/SalesVisa/components/visaOrderList.vue
+53
-4
No files found.
src/components/SalesVisa/components/VisaProductOrder.vue
View file @
71ca7eef
...
...
@@ -390,6 +390,7 @@
</span>
</li>
<li>
<input
v-if=
"userInfo.SimpleEasy==1"
type=
"button"
class=
"hollowFixedBtn"
:value=
"$t('pub.addBtn')"
@
click=
"addOrders"
/>
<button
class=
"hollowFixedBtn"
@
click=
"getList()"
>
{{
$t
(
'pub.searchBtn'
)
}}
</button>
</li>
</ul>
...
...
@@ -519,19 +520,33 @@
</el-row>
</el-form>
</div>
<pinkDrawer
ref=
"addOrders"
:drawer-config=
"drawerConfig"
>
<template
slot=
"drawer"
slot-scope=
"
{ visible, close }">
<cruiseShipInfo
v-if=
"visible"
:isDrawerMode=
"true"
:details=
"selectedSpotData"
@
close=
"close"
@
save-success=
"handleSaveSuccess"
></cruiseShipInfo>
</
template
>
</pinkDrawer>
</div>
</template>
<
script
>
import
visaOrderList
from
'./visaOrderList.vue'
;
import
pinkDrawer
from
'../../common/pinkDrawer.vue'
;
import
DateLimit
from
'../../public/DateLimit.vue'
;
import
cruiseShipInfo
from
'./cruiseShipInfo.vue'
;
import
addConfig
from
"./addConfig.js"
;
export
default
{
props
:
[
'pagesTitle'
],
components
:
{
visaOrderList
,
DateLimit
DateLimit
,
pinkDrawer
,
cruiseShipInfo
,
},
data
()
{
return
{
selectedSpotData
:
null
,
pickerStartDate
:
{
disabledDate
:
time
=>
{
let
startTime
=
new
Date
(
this
.
msg
.
StartDate
);
...
...
@@ -633,7 +648,21 @@
layerCompanyList
:
[]
}
},
computed
:
{
// 抽屉配置
drawerConfig
()
{
return
addConfig
.
drawerConfig
;
},
},
methods
:
{
addOrders
()
{
this
.
$refs
.
addOrders
.
openDrawer
();
},
handleSaveSuccess
()
{
this
.
$refs
.
addOrders
.
handleDrawerClose
();
this
.
getList
();
this
.
$message
.
success
(
'保存成功'
);
},
pickerEnd
(){
if
(
this
.
msg
.
FinishSDate
>
this
.
msg
.
FinishEDate
&&
this
.
msg
.
FinishEDate
!==
""
)
{
this
.
$message
.
error
(
this
.
$t
(
'tips.jsrqbndyksriqi'
));
...
...
src/components/SalesVisa/components/addConfig.js
0 → 100644
View file @
71ca7eef
// 邮轮列表配置
export
const
addConfig
=
{
// 抽屉配置
drawerConfig
:
{
title
:
'签证信息'
,
size
:
'90%'
,
direction
:
'rtl'
},
}
// 导出默认配置
export
default
addConfig
src/components/SalesVisa/components/cruiseShipInfo.vue
0 → 100644
View file @
71ca7eef
<
style
>
@import
"../../../assets/css/DMC.css"
;
.drawer-mode
{
display
:
flex
;
height
:
100%
;
flex-direction
:
column
;
}
/* 抽屉模式下的样式优化 */
.drawer-mode
.changInfo
{
padding
:
0
;
margin
:
0
;
height
:
100%
;
display
:
flex
;
flex-direction
:
column
;
}
.drawer-mode
.resource-content
{
padding
:
0
;
flex
:
1
;
overflow
:
hidden
;
margin
:
0
!important
;
}
.drawer-mode
.hotel-form-container
{
width
:
100%
;
height
:
100%
;
display
:
flex
;
flex-direction
:
column
;
}
/* Tabs 样式优化 */
.drawer-mode
.hotel-tabs
{
flex
:
1
;
display
:
flex
;
flex-direction
:
column
;
border
:
none
;
box-shadow
:
none
;
}
.drawer-mode
.hotel-tabs
.el-tabs__header
{
margin
:
0
;
background
:
#f8f9fa
;
border-bottom
:
1px
solid
#e8e8e8
;
}
.drawer-mode
.hotel-tabs
.el-tabs__nav-wrap
{
padding
:
0
20px
;
}
.drawer-mode
.hotel-tabs
.el-tabs__item
{
height
:
40px
;
line-height
:
40px
;
font-size
:
13px
;
font-weight
:
500
;
color
:
#595959
;
border
:
none
;
padding
:
0
20px
;
}
.drawer-mode
.hotel-tabs
.el-tabs__item.is-active
{
color
:
#1890ff
;
background
:
#fff
;
border-bottom
:
2px
solid
#1890ff
;
}
.drawer-mode
.hotel-tabs
.el-tabs__content
{
flex
:
1
;
overflow-y
:
auto
;
padding
:
0
;
}
.drawer-mode
.hotel-tabs
.el-tab-pane
{
height
:
100%
;
}
/* Tab 内容区域 */
.drawer-mode
.tab-content
{
padding
:
20px
;
height
:
100%
;
overflow-y
:
auto
;
}
.drawer-mode
.tab-content.hidden
{
height
:
calc
(
100vh
-
160px
);
overflow
:
hidden
;
display
:
flex
;
flex-direction
:
column
;
}
/* 表单样式优化 */
.drawer-mode
.el-form
{
padding
:
0
;
}
.drawer-mode
.el-form-item
{
margin-bottom
:
16px
;
}
.drawer-mode
.el-form-item__label
{
font-size
:
13px
;
font-weight
:
500
;
line-height
:
32px
;
color
:
#262626
;
/* width: 120px !important; */
}
/* 输入框和下拉框优化 */
.drawer-mode
.el-input
,
.drawer-mode
.el-select
{
width
:
100%
;
}
.drawer-mode
.el-input__inner
,
.drawer-mode
.el-select
.el-input__inner
{
height
:
32px
;
line-height
:
32px
;
font-size
:
13px
;
border
:
1px
solid
#d9d9d9
;
border-radius
:
4px
;
transition
:
all
0.2s
ease
;
}
.drawer-mode
.el-input__inner
:focus
,
.drawer-mode
.el-select
.el-input__inner
:focus
{
border-color
:
#1890ff
;
box-shadow
:
0
0
0
2px
rgba
(
24
,
144
,
255
,
0.2
);
}
.drawer-mode
.el-textarea__inner
{
font-size
:
13px
;
border
:
1px
solid
#d9d9d9
;
border-radius
:
4px
;
min-height
:
60px
;
}
.drawer-mode
.el-textarea__inner
:focus
{
border-color
:
#1890ff
;
box-shadow
:
0
0
0
2px
rgba
(
24
,
144
,
255
,
0.2
);
}
/* 日期选择器优化 */
.drawer-mode
.el-date-editor
{
width
:
100%
;
}
.drawer-mode
.el-date-editor
.el-input__inner
{
height
:
32px
;
line-height
:
32px
;
}
/* 联系人区域样式 */
.drawer-mode
.contact-header
{
margin-bottom
:
20px
;
padding-bottom
:
10px
;
border-bottom
:
1px
solid
#e8e8e8
;
text-align
:
right
;
}
.drawer-mode
.contact-list
{
flex
:
1
;
overflow-y
:
auto
;
}
.drawer-mode
.contact-item
{
margin-bottom
:
12px
;
padding
:
12px
;
background
:
#fafbfc
;
border
:
1px
solid
#e8e8e8
;
border-radius
:
6px
;
position
:
relative
;
display
:
flex
;
align-items
:
start
;
padding-bottom
:
0
;
}
.drawer-mode
.contact-item
.el-form-item__content
{
margin-left
:
0px
!important
;
}
/* 上传区域样式 */
.drawer-mode
.upload-section
{
display
:
flex
;
flex-direction
:
column
;
gap
:
8px
;
}
.drawer-mode
.upload-section
a
{
color
:
#1890ff
;
text-decoration
:
none
;
font-size
:
13px
;
margin-right
:
8px
;
display
:
inline-block
;
margin-bottom
:
4px
;
}
.drawer-mode
.upload-section
a
:hover
{
color
:
#40a9ff
;
text-decoration
:
underline
;
}
/* 按钮区域优化 */
.drawer-mode
.btn-list
{
position
:
sticky
;
bottom
:
0
;
background
:
#fff
;
padding
:
16px
20px
;
border-top
:
1px
solid
#e8e8e8
;
margin
:
0
;
z-index
:
100
;
box-shadow
:
0
-2px
8px
rgba
(
0
,
0
,
0
,
0.1
);
}
.drawer-mode
.btn-actions
{
display
:
flex
;
justify-content
:
flex-end
;
gap
:
12px
;
}
.drawer-mode
.save-Btn
,
.drawer-mode
.cancel-Btn
{
height
:
36px
;
padding
:
0
20px
;
font-size
:
14px
;
border-radius
:
4px
;
cursor
:
pointer
;
border
:
1px
solid
;
transition
:
all
0.2s
ease
;
}
.drawer-mode
.save-Btn
{
background
:
#1890ff
;
border-color
:
#1890ff
;
color
:
#fff
;
}
.drawer-mode
.save-Btn
:hover
{
background
:
#40a9ff
;
border-color
:
#40a9ff
;
}
.drawer-mode
.save-Btn
:disabled
{
background
:
#d9d9d9
;
border-color
:
#d9d9d9
;
color
:
#bfbfbf
;
cursor
:
not-allowed
;
}
.drawer-mode
.save-Btn
:disabled:hover
{
background
:
#d9d9d9
;
border-color
:
#d9d9d9
;
}
.drawer-mode
.cancel-Btn
{
background
:
#fff
;
border-color
:
#d9d9d9
;
color
:
#595959
;
}
.drawer-mode
.cancel-Btn
:hover
{
background
:
#f5f5f5
;
border-color
:
#40a9ff
;
color
:
#40a9ff
;
}
/* 上传按钮优化 */
.drawer-mode
.el-button--small
{
height
:
28px
;
padding
:
0
12px
;
font-size
:
12px
;
border-radius
:
4px
;
}
.drawer-mode
.el-button--primary.el-button--small
{
background
:
#1890ff
;
border-color
:
#1890ff
;
}
.drawer-mode
.el-button--primary.el-button--small
:hover
{
background
:
#40a9ff
;
border-color
:
#40a9ff
;
}
/* 滚动条样式 */
.drawer-mode
.tab-content
::-webkit-scrollbar
{
width
:
6px
;
}
.drawer-mode
.tab-content
::-webkit-scrollbar-track
{
background-color
:
#f6f8fa
;
border-radius
:
3px
;
}
.drawer-mode
.tab-content
::-webkit-scrollbar-thumb
{
background-color
:
#d0d7de
;
border-radius
:
3px
;
}
.drawer-mode
.tab-content
::-webkit-scrollbar-thumb:hover
{
background-color
:
#8c959f
;
}
/* 加载状态样式 */
.loading-container
{
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
min-height
:
300px
;
padding
:
40px
;
}
.loading-content
{
display
:
flex
;
flex-direction
:
column
;
align-items
:
center
;
text-align
:
center
;
}
.loading-content
.el-loading-spinner
{
margin-bottom
:
16px
;
}
.loading-content
.el-loading-spinner
.circular
{
width
:
32px
;
height
:
32px
;
color
:
#1890ff
;
}
.loading-content
p
{
color
:
#666
;
font-size
:
14px
;
margin
:
0
;
}
/* 错误状态样式 */
.error-container
{
display
:
flex
;
align-items
:
center
;
justify-content
:
center
;
min-height
:
300px
;
padding
:
40px
;
}
.error-content
{
display
:
flex
;
flex-direction
:
column
;
align-items
:
center
;
text-align
:
center
;
max-width
:
400px
;
}
.error-content
.el-icon-warning
{
font-size
:
48px
;
color
:
#f56c6c
;
margin-bottom
:
16px
;
}
.error-content
.error-title
{
color
:
#f56c6c
;
font-size
:
16px
;
font-weight
:
500
;
margin
:
0
0
8px
0
;
}
.error-content
.error-message
{
color
:
#666
;
font-size
:
14px
;
margin
:
0
0
20px
0
;
line-height
:
1.5
;
}
.error-actions
{
display
:
flex
;
gap
:
12px
;
}
.error-actions
.el-button
{
min-width
:
80px
;
}
/* 响应式优化 */
@media
(
max-width
:
1200px
)
{
.drawer-mode
.el-col
[
class
*=
"span-6"
]
{
width
:
50%
!important
;
}
.drawer-mode
.el-col
[
class
*=
"span-4"
]
{
width
:
33.333%
!important
;
}
}
@media
(
max-width
:
768px
)
{
.drawer-mode
.el-col
[
class
*=
"span-"
]
{
width
:
100%
!important
;
}
.drawer-mode
.tab-content
{
padding
:
16px
;
}
.drawer-mode
.el-form-item__label
{
width
:
100px
!important
;
}
.loading-container
,
.error-container
{
min-height
:
200px
;
padding
:
20px
;
}
.error-actions
{
flex-direction
:
column
;
width
:
100%
;
}
.error-actions
.el-button
{
width
:
100%
;
}
}
.cruiseShipInfo
{
display
:
flex
;
flex-direction
:
row
;
}
</
style
>
<
template
>
<div
class=
"flexOne changInfo"
:class=
"
{ 'drawer-mode': isDrawerMode }">
<!-- 正常内容 -->
<div
class=
"resource-content clearfix"
>
<!-- :disabled="addMsg.OrderId>0&&(activeTab=='basic'||activeTab=='contact')" -->
<el-form
:model=
"addMsg"
:rules=
"rules"
class=
"h-full"
ref=
"addMsg"
label-width=
"120px"
>
<div
class=
"hotel-form-container h-full"
>
<el-tabs
v-model=
"activeTab"
type=
"border-card"
class=
"hotel-tabs"
>
<el-tab-pane
label=
"基础资料"
name=
"basic"
>
<div
class=
"tab-content"
>
<el-row
:gutter=
"16"
>
<el-col
:span=
"6"
>
<el-form-item
label=
"签证名称"
prop=
"DisplayCouponsId"
>
<el-select
v-model=
"addMsg.VisaId"
placeholder=
"请选择"
filterable
allow-create
default-first-option
clearable
remote
reserve-keyword
:remote-method=
"getCruiseShip"
:loading=
"CSloading"
@
change=
"(val)=>
{handleChange(val,1)}">
<el-option
v-for=
"item in CruiseShipList"
:key=
"item.Id"
:label=
"item.Name"
:value=
"item.Id"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"人数"
prop=
"PeopleNum"
>
<el-input
type=
"number"
v-model=
"addMsg.PeopleNum"
></el-input>
</el-form-item>
</el-col>
<!--
<el-col
:span=
"6"
>
<el-form-item
label=
"房型名称"
prop=
"DisplayTicketId"
>
<el-select
v-model=
"addMsg.DisplayTicketId"
placeholder=
"请选择"
filterable
allow-create
default-first-option
clearable
remote
reserve-keyword
:remote-method=
"getRoomType"
:loading=
"RTloading"
@
change=
"(val)=>
{handleChange(val,2)}">
<el-option
v-for=
"item in RoomTypeList"
:key=
"item.Id"
:label=
"item.TicketName"
:value=
"item.Id"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"出游时间"
prop=
"UseDate"
>
<el-date-picker
v-model=
"addMsg.UseDate"
type=
"date"
placeholder=
"出游时间"
>
</el-date-picker>
</el-form-item>
</el-col>
-->
<el-col
:span=
"6"
>
<el-form-item
label=
"OP"
>
<el-select
v-model=
"addMsg.AppointOPList"
multiple
filterable
collapse-tags
placeholder=
"请选择OP"
>
<el-option
v-for=
'item in EmployeeList'
:label=
'item.EmName'
:value=
'item.EmployeeId'
:key=
'item.EmployeeId'
></el-option>
</el-select>
</el-form-item>
</el-col>
<!--
<el-col
:span=
"6"
>
<el-form-item
label=
"预订人"
prop=
"Name"
>
<el-input
type=
"text"
v-model=
"addMsg.Name"
maxlength=
"100"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"预订人(英文名)"
>
<el-input
type=
"text"
v-model=
"addMsg.EName"
maxlength=
"100"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"预订人手机号"
>
<el-input
type=
"text"
v-model=
"addMsg.Mobile"
maxlength=
"100"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"预订人性别"
>
<el-select
v-model=
"addMsg.Sex"
placeholder=
"请选择"
>
<el-option
label=
"男"
value=
"1"
></el-option>
<el-option
label=
"女"
value=
"2"
></el-option>
</el-select>
</el-form-item>
</el-col>
-->
<el-col
:span=
"6"
>
<el-form-item
label=
"供应商"
prop=
"DisplaySupplierId"
>
<el-select
v-model=
"addMsg.DisplaySupplierId"
placeholder=
"请输入关键字查询"
filterable
allow-create
default-first-option
clearable
remote
reserve-keyword
:remote-method=
"getSupplier"
:loading=
"SPloading"
@
change=
"(val)=>
{handleChange(val,3)}">
<el-option
v-for=
"item in SupplierList"
:key=
"item.ID"
:label=
"item.Name"
:value=
"item.ID"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"供应商联系人"
prop=
"Contact"
>
<el-input
type=
"text"
v-model=
"addMsg.Contact"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"供应商联系电话"
prop=
"Tel"
>
<el-input
type=
"tel"
v-model=
"addMsg.Tel"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"供应商(公司名称)"
>
<el-input
type=
"text"
v-model=
"addMsg.CompanyName"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"供应商(公司电话)"
>
<el-input
type=
"tel"
v-model=
"addMsg.CompanyPhone"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"营业执照号"
>
<el-input
type=
"text"
v-model=
"addMsg.DutyParagraph"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"开户行"
>
<el-input
type=
"text"
v-model=
"addMsg.OpeningBank"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"开户账号"
>
<el-input
type=
"text"
v-model=
"addMsg.BankNo"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"成本"
prop=
"Meet"
>
<el-input
type=
"number"
v-model=
"addMsg.Meet"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"应收总金额"
prop=
"TotalPrice"
>
<el-input
type=
"number"
v-model=
"addMsg.TotalPrice"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"订单备注"
>
<el-input
type=
"textarea"
v-model=
"addMsg.Remark"
placeholder=
"订单备注"
></el-input>
</el-form-item>
</el-col>
</el-row>
</div>
</el-tab-pane>
<el-tab-pane
label=
"旅客信息"
name=
"contact"
>
<div
class=
"tab-content hidden"
>
<div
class=
"contact-header"
>
<el-button
type=
"primary"
size=
"small"
@
click=
"AddContract()"
>
添加旅客
</el-button>
</div>
<div
class=
"contact-list"
v-if=
"addMsg.GuestList&&addMsg.GuestList.length>0"
>
<el-form-item
v-for=
"(item,index) in addMsg.GuestList"
:key=
"index"
label-width=
"0px"
>
<div
class=
"contact-item"
:key=
"`contact-$
{index}`">
<el-row
:gutter=
"16"
style=
"flex: 1;"
>
<el-col
:span=
"4"
prop=
"Money"
>
<el-form-item
:label=
"addMsg.GuestList.length>0?`$
{$t('admin.mane')} ${index+1} `:` ` "
:prop="`GuestList.${index}.Name`"
:rules="rules.Name2"
class="cruiseShipInfo"
label-width="70px">
<el-input
placeholder=
"请输入旅客名称"
v-model=
"item.Name"
clearable
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"3"
>
<el-form-item>
<el-input
placeholder=
"请输入身份证号"
v-model=
"item.IdCard"
clearable
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"3"
>
<el-form-item>
<el-input
placeholder=
"请输入护照号"
v-model=
"item.PassportNo"
clearable
>
</el-input>
</el-form-item>
</el-col>
<el-col
:span=
"3"
>
<el-form-item>
<el-date-picker
v-model=
"item.PassportIssued"
type=
"date"
placeholder=
"护照签发日期"
clearable
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col
:span=
"3"
>
<el-form-item>
<el-date-picker
v-model=
"item.PassportExpiry"
type=
"date"
placeholder=
"护照有效期"
clearable
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col
:span=
"4"
>
<el-form-item
:label=
"addMsg.GuestList.length>0?`$
{$t('admin.admin_Birthday')} ${index+1} `:` ` "
:prop="`GuestList.${index}.Birthday`"
:rules="rules.Birthday"
class="cruiseShipInfo"
label-width="70px">
<el-date-picker
v-model=
"item.Birthday"
type=
"date"
placeholder=
"请选择生日"
clearable
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col
:span=
"4"
>
<el-form-item
:label=
"addMsg.GuestList.length>0?`$
{$t('hotel.table_tel')} ${index+1} `:` ` "
:prop="`GuestList.${index}.Tel`"
:rules="rules.Tel2"
class="cruiseShipInfo"
label-width="70px">
<el-input
:placeholder=
"$t('visaT.qsrphone')"
v-model=
"item.Tel"
clearable
>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-button
style=
"margin-top: 8px; margin-left: 10px;"
type=
"danger"
size=
"mini"
@
click=
"deleteContract(index)"
>
删除
</el-button>
</div>
</el-form-item>
</div>
</div>
</el-tab-pane>
<el-tab-pane
label=
"设置"
name=
"internal"
>
<div
class=
"tab-content"
>
<el-row
:gutter=
"16"
>
<el-col
:span=
"4"
>
<el-form-item
label=
"尾款提醒"
label-width=
"70px"
>
<el-input
type=
"number"
v-model=
"addMsg.FinalPriceTips"
placeholder=
"天数"
></el-input>
</el-form-item>
</el-col>
</el-row>
</div>
</el-tab-pane>
</el-tabs>
</div>
</el-form>
</div>
<el-dialog
custom-class=
"resourceImgAdd"
:title=
"$t('ground.xuanzetupian')"
center
:visible
.
sync=
"addimg"
>
<DMCchooseImg
@
closeImg=
"closeDMCchooseImg"
ref=
"DMCchooseImg1"
@
headCallBack=
"getDMCimg"
v-bind:imgType=
"1"
>
</DMCchooseImg>
</el-dialog>
<div
class=
"btn-list"
>
<div
class=
"btn-actions"
>
<button
class=
"save-Btn"
@
click=
"submitForm('addMsg')"
:disabled=
"isSaving"
>
<i
v-if=
"isSaving"
class=
"el-icon-loading"
style=
"margin-right: 4px;"
></i>
{{
isSaving
?
''
:
$t
(
'pub.saveBtn'
)
}}
</button>
<button
class=
"cancel-Btn"
@
click=
"goUrl('HotelManagement')"
>
{{
isDrawerMode
?
'关闭'
:
$t
(
'pub.cancelBtn'
)
}}
</button>
</div>
</div>
<viewer
:images=
"images"
:options=
'imageOptions'
@
inited=
"inited"
class=
"viewer"
ref=
"viewer"
>
<img
v-for=
"src in images"
:src=
"src"
:key=
"src"
>
</viewer>
</div>
</
template
>
<
script
>
import
DMCchooseImg
from
"../../commonPage/DMCchooseImg.vue"
;
import
{
listManagerMixin
}
from
"../../common/mixins/listManagerMixin.js"
;
export
default
{
mixins
:
[
listManagerMixin
],
props
:
{
itemId
:
{
type
:
[
String
,
Number
],
default
:
0
},
details
:
{
type
:
Object
,
default
:
()
=>
{}
},
isDrawerMode
:
{
type
:
Boolean
,
default
:
false
}
},
data
()
{
return
{
activeTab
:
'basic'
,
// 默认激活基础资料标签页
isLoading
:
false
,
// 加载状态
loadError
:
null
,
// 加载错误信息
isSaving
:
false
,
// 保存状态
isRetrying
:
false
,
// 重试状态
imageOptions
:
{
navbar
:
false
,
title
:
false
},
images
:
[],
//是否显示添加图片
addimg
:
false
,
//上传的文件数组
HotelImageArray
:
[],
//删除的图片文件数组
DeleteImageArray
:
[],
//地接资源图片
imglistArry
:
[],
//地接图片搜索关键字
imgKeyword
:
""
,
starslevel
:
""
,
//获取酒店星级
totalimg
:
""
,
selecnum
:
0
,
imgBeforeFile
:
this
.
domainManager
().
ViittoFileUrl
,
//下拉框默认值
SelectDefaultValue
:
0
,
//国家列表
CountryList
:
[],
//省份列表
ProvinceList
:
[],
//城市列表
CityList
:
[],
addMsg
:
{
OrderId
:
0
,
// 订单号
TotalPrice
:
null
,
// 应收总金额
Meet
:
null
,
// 成本
Remark
:
''
,
// 订单备注
DisplayCouponsId
:
null
,
// 签证id
VisaId
:
null
,
// 签证id
Name
:
''
,
// 签证名称
PeopleNum
:
""
,
//签证人数
// DisplayTicketId: null,
//UseDate: '',// 出游时间
// Name: '',// 预订人
// EName: '',// 预订人(英文名)
// Sex: null,// 性别,1-男2女
// Mobile: '',// 联系手机号
DisplaySupplierId
:
null
,
SupplierId
:
null
,
// 供应商id
SupplierName
:
''
,
// 供应商
Tel
:
''
,
// 供应商联系电话
Contact
:
''
,
// 供应商联系人
CompanyName
:
''
,
// 供应商(公司名称)
DutyParagraph
:
''
,
// 营业执照号
CompanyPhone
:
''
,
// 电话
OpeningBank
:
''
,
// 开户行
BankNo
:
''
,
// 开户账号
AppointOPList
:
[],
// op 格式:([1,2,3])
GuestList
:
[],
// 旅客名单
FinalPriceTips
:
''
,
// 尾款提醒设置
},
GuestObj
:
{
Birthday
:
''
,
// 生日
Name
:
''
,
// 名称
IdCard
:
''
,
// 身份证号
PassportNo
:
''
,
// 护照号
PassportIssued
:
''
,
// 护照签发日期
PassportExpiry
:
''
,
// 护照有效期
Tel
:
''
,
// 联系电话
},
uploadType
:
""
,
//上传文件类型
baseList
:
[],
//澡盆,婴儿床,连通房
vatList
:
[],
//VAT配置
starList
:
[],
//星级
bjfsList
:
[],
//报价方式
configDetailsList
:
[],
//酒店
rules
:
{
VisaId
:
[{
required
:
true
,
message
:
'请选择或输入签证名称'
,
trigger
:
"change"
}],
DisplaySupplierId
:
[{
required
:
true
,
message
:
'请选择或输入供应商'
,
trigger
:
"change"
}],
Contact
:
[{
required
:
true
,
message
:
'请输入供应商联系人'
,
trigger
:
"blur"
}],
Tel
:
[{
required
:
true
,
message
:
'请输入供应商联系电话'
,
trigger
:
"blur"
}],
Meet
:
[{
required
:
true
,
message
:
'请输入成本'
,
trigger
:
"blur"
}],
TotalPrice
:
[{
required
:
true
,
message
:
'请输入应收总金额'
,
trigger
:
"blur"
}],
PeopleNum
:
[{
required
:
true
,
message
:
'请输入人数'
,
trigger
:
"blur"
}],
// Name: [{
// required: true,
// message: '请输入预订人名称',
// trigger: "blur"
// }],
// EName: [{
// required: true,
// message: '请输入预订人名称(英文名)',
// trigger: "blur"
// }],
Name2
:
[{
required
:
true
,
message
:
'请输入旅客名称'
,
trigger
:
"blur"
}],
Birthday
:
[{
required
:
true
,
message
:
'请选择生日'
,
trigger
:
"change"
}],
Tel2
:
[{
required
:
true
,
message
:
'请输入旅客名称'
,
trigger
:
"blur"
}],
},
CruiseShipList
:
[],
//邮轮
CSloading
:
false
,
RoomTypeList
:
[],
//房型
RTloading
:
false
,
SupplierList
:
[],
//供应商
SPloading
:
false
,
employeeMsg
:
{
// 员工
GroupId
:
''
,
BranchId
:
-
1
,
DepartmentId
:
0
,
PostId
:
0
,
IsLeave
:
0
,
},
};
},
components
:
{
DMCchooseImg
:
DMCchooseImg
},
methods
:
{
async
getCruiseShip
(
query
){
if
(
query
!==
''
)
{
this
.
CSloading
=
true
await
this
.
apipost
(
"dmc_get_visa_GetVisaProductDropDownList"
,
{
Name
:
query
,
},
response
=>
{
this
.
CSloading
=
false
if
(
response
.
data
.
resultCode
==
1
)
{
this
.
CruiseShipList
=
response
.
data
.
data
}
else
{
this
.
Error
(
response
.
data
.
message
)
}
},
error
=>
{
this
.
CSloading
=
false
}
)
}
else
{
this
.
CruiseShipList
=
[]
}
},
async
getRoomType
(
query
){
if
(
query
!==
''
)
{
this
.
RTloading
=
true
await
this
.
apipost
(
"ticketcouponsticket_get_GetList"
,
{
TicketName
:
query
,
CouponsId
:
this
.
addMsg
.
CouponsId
,
},
response
=>
{
this
.
RTloading
=
false
if
(
response
.
data
.
resultCode
==
1
)
{
this
.
RoomTypeList
=
response
.
data
.
data
}
else
{
this
.
Error
(
response
.
data
.
message
)
}
},
error
=>
{
this
.
RTloading
=
false
}
)
}
else
{
this
.
RoomTypeList
=
[]
}
},
async
getSupplier
(
query
){
if
(
query
!==
''
)
{
this
.
SPloading
=
true
await
this
.
apipost
(
"supplier_post_GetAllList"
,
{
Type
:
3
,
Name
:
query
,
},
response
=>
{
this
.
SPloading
=
false
if
(
response
.
data
.
resultCode
==
1
)
{
this
.
SupplierList
=
response
.
data
.
data
}
else
{
this
.
Error
(
response
.
data
.
message
)
}
},
error
=>
{
this
.
SPloading
=
false
}
)
}
else
{
this
.
RoomTypeList
=
[]
this
.
addMsg
.
SupplierName
=
query
}
},
handleChange
(
val
,
type
)
{
let
findIndex
=
-
1
if
(
type
==
1
){
findIndex
=
this
.
CruiseShipList
.
findIndex
(
item
=>
item
.
Id
===
val
)
console
.
log
(
"findIndex"
,
findIndex
);
if
(
findIndex
!=
-
1
)
{
this
.
addMsg
.
Name
=
this
.
CruiseShipList
[
findIndex
].
Name
;
this
.
addMsg
.
VisaId
=
val
}
else
{
this
.
addMsg
.
Name
=
val
this
.
addMsg
.
VisaId
=
0
}
console
.
log
(
this
.
addMsg
.
VisaId
,
"this.addMsg.Name"
,
this
.
addMsg
.
Name
);
}
else
if
(
type
==
2
){
findIndex
=
this
.
RoomTypeList
.
findIndex
(
item
=>
item
.
Id
===
val
)
if
(
findIndex
!=
-
1
)
{
this
.
addMsg
.
TicketName
=
this
.
RoomTypeList
[
findIndex
].
TicketName
;
this
.
addMsg
.
TicketId
=
val
}
else
{
this
.
addMsg
.
TicketName
=
val
this
.
addMsg
.
TicketId
=
0
}
}
else
if
(
type
==
3
){
findIndex
=
this
.
SupplierList
.
findIndex
(
item
=>
item
.
ID
===
val
)
if
(
findIndex
!=
-
1
)
{
this
.
addMsg
.
SupplierName
=
this
.
SupplierList
[
findIndex
].
Name
;
this
.
addMsg
.
SupplierId
=
val
;
this
.
addMsg
.
CompanyName
=
this
.
SupplierList
[
findIndex
].
CompanyName
;
this
.
addMsg
.
Contact
=
this
.
SupplierList
[
findIndex
].
Contact
;
this
.
addMsg
.
Tel
=
this
.
SupplierList
[
findIndex
].
Tel
;
this
.
addMsg
.
DutyParagraph
=
this
.
SupplierList
[
findIndex
].
DutyParagraph
;
this
.
addMsg
.
CompanyPhone
=
this
.
SupplierList
[
findIndex
].
CompanyPhone
;
this
.
addMsg
.
OpeningBank
=
this
.
SupplierList
[
findIndex
].
OpeningBank
;
this
.
addMsg
.
BankNo
=
this
.
SupplierList
[
findIndex
].
BankNo
;
}
else
{
this
.
addMsg
.
SupplierName
=
val
this
.
addMsg
.
SupplierId
=
0
this
.
addMsg
.
CompanyName
=
null
this
.
addMsg
.
Contact
=
null
this
.
addMsg
.
Tel
=
null
this
.
addMsg
.
DutyParagraph
=
null
this
.
addMsg
.
CompanyPhone
=
null
this
.
addMsg
.
OpeningBank
=
null
this
.
addMsg
.
BankNo
=
null
}
}
// console.log(val);
},
//上传酒店图片
UploadImage
(
file
)
{
let
newArr
=
[];
newArr
.
push
(
file
.
file
);
let
fileName
=
file
.
file
.
name
;
var
path
=
"/Upload/DMC/"
;
var
that
=
this
;
this
.
UploadSelfFileT
(
path
,
newArr
,
x
=>
{
var
sourceFileName
=
x
.
data
.
SourceFileName
;
var
imgUrl
=
that
.
domainManager
().
ViittoFileUrl
+
x
.
data
.
FilePath
;
that
.
addMsg
.
HotelDetailsList
.
forEach
(
item
=>
{
//行程或注意事项
if
(
that
.
uploadType
==
"TripNotice"
&&
item
.
HSType
==
1
)
{
item
.
ContentList
[
0
].
Name
=
sourceFileName
;
item
.
ContentList
[
0
].
Url
=
imgUrl
;
}
//星等证明
else
if
(
that
.
uploadType
==
'XDZM'
&&
item
.
HSType
==
3
)
{
item
.
ContentList
[
0
].
Name
=
sourceFileName
;
item
.
ContentList
[
0
].
Url
=
imgUrl
;
}
//加床照片
else
if
(
that
.
uploadType
==
'JCZP'
&&
item
.
HSType
==
6
)
{
item
.
ContentList
[
0
].
Name
=
sourceFileName
;
item
.
ContentList
[
0
].
Url
=
imgUrl
;
}
//房價图片
else
if
(
that
.
uploadType
==
'PriceUrl'
&&
item
.
HSType
==
11
)
{
item
.
ContentList
[
0
].
Name
=
sourceFileName
;
item
.
ContentList
[
0
].
Url
=
imgUrl
;
}
//FOC規定
else
if
(
that
.
uploadType
==
'FOCDesc'
&&
item
.
HSType
==
12
)
{
item
.
ContentList
[
0
].
Name
=
sourceFileName
;
item
.
ContentList
[
0
].
Url
=
imgUrl
;
}
//附加費
else
if
(
that
.
uploadType
==
'FuJiaDesc'
&&
item
.
HSType
==
13
)
{
item
.
ContentList
[
0
].
Name
=
sourceFileName
;
item
.
ContentList
[
0
].
Url
=
imgUrl
;
}
//取消規定
else
if
(
that
.
uploadType
==
'CancelDesc'
&&
item
.
HSType
==
14
)
{
item
.
ContentList
[
0
].
Name
=
sourceFileName
;
item
.
ContentList
[
0
].
Url
=
imgUrl
;
}
//小童備註
else
if
(
that
.
uploadType
==
'ChildDesc'
&&
item
.
HSType
==
15
)
{
item
.
ContentList
[
0
].
Name
=
sourceFileName
;
item
.
ContentList
[
0
].
Url
=
imgUrl
;
}
//合約資訊
else
if
(
that
.
uploadType
==
'ContractDesc'
&&
item
.
HSType
==
17
)
{
item
.
ContentList
[
0
].
Name
=
sourceFileName
;
item
.
ContentList
[
0
].
Url
=
imgUrl
;
}
})
});
},
//添加Drive
AddDrive
()
{
if
(
this
.
addMsg
.
HotelDetailsList
&&
this
.
addMsg
.
HotelDetailsList
.
length
>
0
)
{
var
tempObj
=
this
.
addMsg
.
HotelDetailsList
.
find
(
qitem
=>
qitem
.
HSType
==
4
);
if
(
!
tempObj
)
{
var
contractObj
=
{
HSType
:
4
,
TextType
:
2
,
ContentList
:
[],
}
this
.
addMsg
.
HotelDetailsList
.
push
(
contractObj
)
}
this
.
addMsg
.
HotelDetailsList
.
forEach
(
item
=>
{
if
(
item
.
HSType
==
4
)
{
if
(
!
item
.
ContentList
)
{
item
.
ContentList
=
[];
}
var
cObj
=
{
Name
:
""
,
//名称
Url
:
""
,
//地址
};
item
.
ContentList
.
push
(
cObj
);
}
})
}
},
//删除Drive
DeleteDrive
(
index
)
{
if
(
this
.
addMsg
.
HotelDetailsList
&&
this
.
addMsg
.
HotelDetailsList
.
length
>
0
)
{
this
.
addMsg
.
HotelDetailsList
.
forEach
(
item
=>
{
if
(
item
.
HSType
==
4
)
{
item
.
ContentList
.
splice
(
index
,
1
);
}
})
}
},
//添加联系人
AddContract
()
{
this
.
addMsg
.
GuestList
.
push
(
JSON
.
parse
(
JSON
.
stringify
(
this
.
GuestObj
)));
},
//删除联系人
deleteContract
(
index
)
{
this
.
addMsg
.
GuestList
.
splice
(
index
,
1
);
},
//删除图片
delImg
(
index
)
{
var
item
=
this
.
HotelImageArray
[
index
];
this
.
DeleteImageArray
.
push
(
item
);
this
.
HotelImageArray
.
splice
(
index
,
1
);
},
inited
(
viewer
)
{
this
.
$viewer
=
viewer
},
showImg
:
function
(
src
)
{
let
srcArr
=
src
.
split
(
'?'
)
src
=
srcArr
[
0
]
let
isExsit
=
false
this
.
images
.
forEach
(
x
=>
{
if
(
x
===
src
)
isExsit
=
true
})
if
(
!
isExsit
)
{
this
.
images
.
push
(
src
)
}
else
{
this
.
$viewer
.
view
(
this
.
images
.
indexOf
(
src
))
}
this
.
$viewer
.
show
()
},
addImgOpen
()
{
this
.
addimg
=
true
;
this
.
initimgList
();
},
saveResource
()
{
// 防重复提交
if
(
this
.
isSaving
)
{
return
;
}
this
.
isSaving
=
true
;
this
.
apipost
(
"dmc_get_visa_SetVisaOrder"
,
this
.
addMsg
,
response
=>
{
this
.
isSaving
=
false
;
//修改添加接口
if
(
response
.
data
.
resultCode
==
1
)
{
this
.
Success
(
this
.
$t
(
'tips.saveYes'
))
if
(
this
.
isDrawerMode
)
{
this
.
$emit
(
'save-success'
)
}
else
{
this
.
goUrl
(
"HotelManagement"
)
}
}
else
{
this
.
Error
(
response
.
data
.
message
)
}
},
error
=>
{
this
.
isSaving
=
false
;
this
.
Error
(
'保存失败,请检查网络连接'
);
}
)
},
selectImg
(
index
)
{
//选取弹窗图片
this
.
imglistArry
[
index
].
isShow
=
!
this
.
imglistArry
[
index
].
isShow
;
let
num
=
0
;
if
(
this
.
imglistArry
!=
null
)
{
this
.
imglistArry
.
forEach
(
x
=>
{
if
(
x
.
isShow
==
true
)
{
num
++
;
}
this
.
selecnum
=
num
;
});
}
},
initDataDetails
()
{
// 验证酒店ID
if
(
!
this
.
addMsg
.
OrderId
||
this
.
addMsg
.
OrderId
<=
0
)
{
this
.
loadError
=
'无效的邮轮ID'
;
return
;
}
// 设置加载状态
this
.
isLoading
=
true
;
this
.
loadError
=
null
;
var
msg
=
{
hotelID
:
this
.
addMsg
.
OrderId
};
var
_self
=
this
;
this
.
apipost
(
"hotel_post_GetAll"
,
msg
,
res
=>
{
_self
.
isLoading
=
false
;
_self
.
isRetrying
=
false
;
if
(
res
.
data
.
resultCode
==
1
)
{
_self
.
addMsg
=
res
.
data
.
data
;
if
(
_self
.
addMsg
.
Province
>
0
)
{
this
.
GetSubAreaList
(
_self
.
addMsg
.
Province
,
'city'
);
}
}
else
{
_self
.
loadError
=
res
.
data
.
message
||
'加载酒店信息失败'
;
_self
.
Error
(
res
.
data
.
message
);
}
},
error
=>
{
_self
.
isLoading
=
false
;
_self
.
isRetrying
=
false
;
_self
.
loadError
=
'网络请求失败,请检查网络连接'
;
_self
.
Error
(
'网络请求失败,请检查网络连接'
);
}
);
},
// 重试加载方法
retryLoad
()
{
this
.
isRetrying
=
true
;
this
.
initDataDetails
();
},
goUrl
(
path
)
{
if
(
this
.
isDrawerMode
)
{
this
.
$emit
(
'close'
)
}
else
{
this
.
$router
.
push
({
path
:
path
,
query
:
{
cache
:
true
}
})
}
},
validate
(){
let
msg
=
''
if
(
msg
==
''
&&
(
!
this
.
addMsg
.
VisaId
||
this
.
addMsg
.
VisaId
==
''
||!
this
.
addMsg
.
Meet
||
this
.
addMsg
.
Meet
==
''
||!
this
.
addMsg
.
TotalPrice
||
this
.
addMsg
.
TotalPrice
==
''
)){
msg
=
'基础资料请填入必填项'
this
.
activeTab
=
'basic'
}
else
if
(
this
.
addMsg
.
GuestList
.
length
>
0
){
for
(
let
i
=
0
;
i
<
this
.
addMsg
.
GuestList
.
length
;
i
++
){
let
item
=
this
.
addMsg
.
GuestList
[
i
]
if
(
msg
==
''
&&
(
!
item
.
Name
||
item
.
Name
==
''
||!
item
.
Birthday
||
item
.
Birthday
==
''
||!
item
.
Tel
||
item
.
Tel
==
''
)){
msg
=
'旅客信息请填入必填项'
this
.
activeTab
=
'contact'
}
}
}
return
msg
},
submitForm
(
addMsg
)
{
//提交创建、修改表单
let
msg
=
this
.
validate
()
if
(
msg
!=
''
)
return
this
.
Error
(
msg
)
let
that
=
this
;
that
.
$refs
[
addMsg
].
validate
(
valid
=>
{
if
(
valid
)
{
that
.
saveResource
();
}
else
{
return
false
;
}
});
},
//选中的数组
checkImgList
()
{
if
(
this
.
imglistArry
!=
null
)
{
this
.
imglistArry
.
forEach
(
x
=>
{
if
(
x
.
isShow
==
true
)
{
var
obj
=
this
.
$DMCUtils
.
DMCImageObj
();
obj
.
Path
=
"/U"
+
this
.
$commonUtils
.
getCaption
(
x
.
Path
,
"Upload"
);
obj
.
ShowPath
=
x
.
Path
;
obj
.
PicID
=
x
.
ID
;
this
.
HotelImageArray
.
push
(
obj
);
}
x
.
isShow
=
false
;
this
.
selecnum
=
0
;
});
}
this
.
addimg
=
false
;
},
closeDMCchooseImg
()
{
this
.
addimg
=
false
;
},
getDMCimg
(
imgArr
)
{
imgArr
.
forEach
(
imgItem
=>
{
var
obj
=
this
.
$DMCUtils
.
DMCImageObj
();
obj
.
ID
=
0
;
obj
.
Path
=
this
.
$commonUtils
.
removeDomain
(
imgItem
.
Path
);
obj
.
PicID
=
imgItem
.
ID
;
obj
.
ShowPath
=
imgItem
.
Path
+
"?x-oss-process=image/resize,l_140"
;
this
.
HotelImageArray
.
push
(
obj
);
});
},
//获取国家
GetCounrty
()
{
var
that
=
this
;
this
.
apipost
(
"dict_post_Destination_GetCountry"
,
{},
res
=>
{
var
tempCountryArray
=
res
.
data
.
data
;
if
(
tempCountryArray
&&
tempCountryArray
.
length
>
0
)
{
that
.
GetSubAreaList
(
tempCountryArray
[
0
].
ID
,
'province'
)
}
}
);
},
//获取省份和城市
GetSubAreaList
(
ID
,
typeStr
)
{
let
msg
=
{
Id
:
ID
};
this
.
apipost
(
"dict_post_Destination_GetChildList"
,
msg
,
res
=>
{
if
(
typeStr
==
'province'
)
{
this
.
ProvinceList
=
res
.
data
.
data
;
}
else
if
(
typeStr
==
'city'
)
{
this
.
CityList
=
res
.
data
.
data
;
}
},
err
=>
{}
);
},
//获取酒店配置
getHotelConfig
()
{
this
.
apipost
(
"hotel_post_GetNewHotelConfig"
,
{},
res
=>
{
if
(
res
.
data
.
resultCode
==
1
)
{
var
tempData
=
res
.
data
.
data
;
if
(
tempData
&&
tempData
.
length
>
0
)
{
tempData
.
forEach
(
item
=>
{
if
(
item
.
DicKey
==
'Hotel_ZLY'
)
{
this
.
baseList
=
item
.
SubList
}
else
if
(
item
.
DicKey
==
"Hotel_VAT"
)
{
this
.
vatList
=
item
.
SubList
;
}
else
if
(
item
.
DicKey
==
"Hotel_Star"
)
{
this
.
starList
=
item
.
SubList
;
}
else
if
(
item
.
DicKey
==
"Hotel_BJFS"
)
{
this
.
bjfsList
=
item
.
SubList
;
}
else
if
(
item
.
DicKey
==
"Hotel_Info"
)
{
this
.
configDetailsList
=
item
.
SubList
;
if
(
this
.
addMsg
.
OrderId
==
0
)
{
this
.
addMsg
.
HotelDetailsList
=
item
.
SubList
;
}
}
})
}
}
});
}
},
created
()
{
// this.GetCounrty();
// this.getHotelConfig();
},
mounted
()
{
// 从 props 或 route 获取 ID
if
(
this
.
details
)
{
this
.
addMsg
.
OrderId
=
this
.
details
.
OrderId
}
},
watch
:
{
details
:
{
deep
:
true
,
immediate
:
true
,
handler
(
newVal
)
{
if
(
newVal
&&
newVal
.
id
>
0
)
{
let
s
=
newVal
.
supplierModel
this
.
CruiseShipList
.
push
({
Id
:
newVal
.
visaId
,
Name
:
newVal
.
name
,
})
this
.
SupplierList
.
push
({
ID
:
s
.
supplierId
,
Name
:
s
.
supplierName
,
})
setTimeout
(()
=>
{
var
guestList
=
[];
if
(
newVal
.
guestList
!=
null
&&
newVal
.
guestList
.
length
>
0
){
newVal
.
guestList
.
forEach
(
item
=>
{
guestList
.
push
({
Birthday
:
item
.
birthday
,
// 生日
Name
:
item
.
userName
,
// 名称
IdCard
:
item
.
idCard
,
// 身份证号
PassportNo
:
item
.
passportNo
,
// 护照号
PassportIssued
:
item
.
passportIssued
,
// 护照签发日期
PassportExpiry
:
item
.
passportExpiry
,
// 护照有效期
Tel
:
item
.
tel
,
// 联系电话
});
});
}
var
appointOPList
=
[];
if
(
newVal
.
appointOPList
!=
null
&&
newVal
.
appointOPList
.
length
>
0
){
newVal
.
appointOPList
.
forEach
(
item
=>
{
appointOPList
.
push
(
item
.
opId
);
});
}
this
.
addMsg
=
{
OrderId
:
newVal
.
id
,
// 订单号
TotalPrice
:
newVal
.
totalPrice
,
// 应收总金额
Meet
:
newVal
.
meet
,
// 成本
Remark
:
newVal
.
remark
,
// 订单备注
VisaId
:
newVal
.
visaId
,
// 邮轮id
Name
:
newVal
.
name
,
// 邮轮名称
PeopleNum
:
newVal
.
peopleNum
,
DisplaySupplierId
:
s
.
supplierId
,
SupplierId
:
s
.
supplierId
,
// 供应商id
SupplierName
:
s
.
supplierName
,
// 供应商
Tel
:
s
.
tel
,
// 供应商联系电话
Contact
:
s
.
contact
,
// 供应商联系人
CompanyName
:
s
.
companyName
,
// 供应商(公司名称)
DutyParagraph
:
s
.
dutyParagraph
,
// 营业执照号
CompanyPhone
:
s
.
companyPhone
,
// 电话
OpeningBank
:
s
.
openingBank
,
// 开户行
BankNo
:
s
.
bankNo
,
// 开户账号
AppointOPList
:
appointOPList
,
// op 格式:([1,2,3])
GuestList
:
guestList
,
// newVal.guestList,// 旅客名单
FinalPriceTips
:
newVal
.
finalPriceTips
,
// 尾款提醒设置
};
console
.
log
(
this
.
addMsg
,
"newVal.guestList"
,
newVal
.
guestList
);
},
1000
)
}
}
}
}
};
</
script
>
src/components/SalesVisa/components/visaOrderList.vue
View file @
71ca7eef
...
...
@@ -586,7 +586,25 @@
</
template
>
</template>
</el-table-column>
<
template
v-if=
"userInfo.SimpleEasy===1"
>
<el-table-column
label=
"OP"
min-width=
"100"
style=
"background:#EAEAEA"
>
<template
slot-scope=
"scope"
>
<template>
<div
class=
"row flex-wrap mb"
v-if=
"scope.row.appointOPList&&scope.row.appointOPList.length>0"
>
<div
class=
"row wrap orderNo fz12 ml"
>
<span
class=
"cursor-pointer radius5 mr px5 bgf5 c3FC4FF"
style=
"margin: 3px;"
v-for=
"(x, i) in scope.row.appointOPList"
:key=
"i+10000"
>
{{
x
.
opName
}}
</span>
</div>
</div>
</
template
>
</template>
</el-table-column>
</template>
<
template
v-else
>
<el-table-column
label=
"OP"
prop=
"opEmName"
min-width=
"100"
style=
"background:#EAEAEA"
></el-table-column>
</
template
>
<el-table-column
:label=
"$t('hotel.hotel_StarDate')"
min-width=
"100"
style=
"background:#EAEAEA"
>
<
template
slot-scope=
"scope"
>
<template>
...
...
@@ -1037,17 +1055,31 @@
<offset
:isShow=
"cdState"
:obj=
"queryObj"
@
close=
"cdState=false"
></offset>
<TransferOrder
v-if=
"showTransferOrder"
:isShow=
"showTransferOrder"
:obj=
"queryObj"
@
success=
"showTransferOrder=false,$emit('success')"
@
close=
"showTransferOrder=false"
></TransferOrder>
<pinkDrawer
ref=
"addOrders"
:drawer-config=
"drawerConfig"
>
<
template
slot=
"drawer"
slot-scope=
"{ visible, close }"
>
<cruiseShipInfo
v-if=
"visible"
:isDrawerMode=
"true"
:details=
"selectedSpotData"
@
close=
"close"
@
save-success=
"handleSaveSuccess"
></cruiseShipInfo>
</
template
>
</pinkDrawer>
</div>
</template>
<
script
>
import
offset
from
'../../public/offset.vue'
;
import
TransferOrder
from
'./TransferOrder.vue'
;
import
commissionDialog
from
"../../FinancialModule/TradeCommission/commissionDialog"
import
pinkDrawer
from
'../../common/pinkDrawer.vue'
;
import
cruiseShipInfo
from
'./cruiseShipInfo.vue'
;
import
addConfig
from
"./addConfig.js"
;
export
default
{
components
:
{
offset
,
TransferOrder
,
commissionDialog
commissionDialog
,
pinkDrawer
,
cruiseShipInfo
,
},
props
:
[
"OrderList"
,
"pagesTitle"
],
data
()
{
...
...
@@ -1159,7 +1191,8 @@
EditOPVisible
:
false
,
OPEmpId
:
0
,
OPOrderId
:
0
,
OPEmpList
:
[]
OPEmpList
:
[],
selectedSpotData
:
null
,
};
},
watch
:
{
...
...
@@ -1172,7 +1205,17 @@
}
}
},
computed
:
{
// 抽屉配置
drawerConfig
()
{
return
addConfig
.
drawerConfig
;
},
},
methods
:
{
handleSaveSuccess
(){
this
.
$refs
.
addOrders
.
handleDrawerClose
();
this
.
$emit
(
'success'
)
},
//提交
submitForm
(
msg
)
{
//提交创建、修改表单
...
...
@@ -1525,6 +1568,12 @@
});
},
getDetail
(
obj
,
updateRStatus
)
{
console
.
log
(
'-----'
)
if
(
this
.
userInfo
.
SimpleEasy
==
1
){
this
.
selectedSpotData
=
obj
;
this
.
$refs
.
addOrders
.
openDrawer
(
obj
);
return
;
}
this
.
SendStartDate
=
obj
.
sendStartDate
this
.
updateRemarksStatus
=
updateRStatus
;
this
.
visaManagementId
=
obj
.
visaManagementId
...
...
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