Commit 2cf143bf authored by youjie's avatar youjie

no message

parent e7d3ca71
......@@ -106,7 +106,7 @@
</ul>
</div>
<template>
<OrderList :OrderList="OrderList" v-loading="loading" @success="GetList"> </OrderList>
<OrderList :pagesTitle="pagesTitle" :OrderList="OrderList" v-loading="loading" @success="GetList"> </OrderList>
<el-pagination background @current-change="handleCurrentChange" :current-page.sync="currentPage" layout="total,prev, pager, next, jumper" :page-size=msg.pageSize :total=total>
</el-pagination>
......@@ -116,6 +116,7 @@
<script>
import OrderList from './OrderList.vue';
export default {
props:['pagesTitle'],
components: { OrderList },
data() {
return {
......@@ -163,7 +164,11 @@
Datelist:''
};
},
watch: {
pagesTitle(val,oldval){
}
},
methods: {
getDates(){
console.log(this.Datelist)
......@@ -226,8 +231,14 @@
// this.msg.EndTime = this.getyMDTwo()
// }
this.loading = true
this.apipost(
"dict_post_GetAdminCustomerOrderPageList", this.msg,
let url
// 销售 OP
if(this.pagesTitle){
url = "dict_post_GetMySaleCustomerOrderPageList"
}else{
url = "dict_post_GetAdminCustomerOrderPageList"
}
this.apipost(url, this.msg,
res => {
if (res.data.resultCode == 1) {
let data = res.data.data.pageData
......
......@@ -349,8 +349,8 @@
<span class="mr">
{{ item.SaleName }}
</span>
<span class="mr">创建人:</span>
<span class="mr"
<span class="mr" v-if="!pagesTitle&&item.CustomerName">创建人:</span>
<span class="mr" v-if="!pagesTitle&&item.CustomerName"
>{{ item.CustomerName }} ({{ item.CustomerContact }}/{{
item.CustomerTel
}})</span
......@@ -523,16 +523,17 @@
</el-table-column>
</el-table>
<div class="row justify-sb mt mb20" v-if="item.OrderStatus!=3">
<div class="row pt20" v-if="item.GuestFileList.length > 0">
<div class="row pt20" style="margin-right: 10px;" v-if="item.GuestFileList.length > 0||((item.CustomerPayType==1 || item.CustomerPayType==3)&&pagesTitle)">
<!-- <i class="el-icon-warning cF57A98 fz15 mr"></i> -->
<div class="column">
<!-- <div class="wrap fz12 c9e">
<!-- <div class="wrap fz12 c9e" v-if="x.CustomerPayType == 2 || x.CustomerPayType == 3">
出发前收款酒店,请您于
<span class="cff9800">{{item.PaymentDate}}</span>
前支付定金,并且于
<span class="cF1416C">{{item.FinalPaymentDate}}</span>
日前支付尾款
</div> -->
<template v-if="item.GuestFileList.length > 0">
<div class="wrap fz12 c9e">
旅客名单
</div>
......@@ -551,15 +552,22 @@
<!-- <div class="cursor-pointer see c04C8C8">查看支付方式</div>
<div class="cursor-pointer ml rec cf">提交付费凭证</div> -->
</div>
<!-- <template v-if="item.CustomerPayType==1 || item.CustomerPayType==3">
</template>
<template v-if="(item.CustomerPayType==1 || item.CustomerPayType==3)&&pagesTitle">
<div class="fz12 mt c9e">
到店自付酒店,需要您于
<span class="cff9800">{{item.UploadGuestDate}}</span>
</div>
<div class="row fz12 see-rec mt">
<div class="cursor-pointer seeLK c059FF6">上车旅客名单</div>
<el-upload ref="my-upload" :http-request="uploadFileBtn" v-loading="loading"
:multiple="true"
:show-file-list="false" action="">
<div :class="{'cursor-pointer seeLK c059FF6':!loading,
'cursor-pointer see c04C8C8':loading}"
@click="uploadOrderId=item.OrderId">上车旅客名单</div>
</el-upload>
</div>
</template> -->
</template>
</div>
</div>
<div class="column px15 bgf5 radius5 flex-g pa relative">
......@@ -628,7 +636,7 @@
</span>
</div>
<el-tooltip
v-if="item.OrderStatus == 2"
v-if="item.OrderStatus == 2&&pagesTitle!='销售'"
class="item"
effect="dark"
content="制单"
......@@ -657,7 +665,7 @@
</span>
</div>
<el-tooltip
v-if="item.OrderStatus == 2"
v-if="item.OrderStatus == 2&&pagesTitle!='销售'"
class="item"
effect="dark"
content="制单"
......@@ -680,7 +688,7 @@
</div>
<div
class="row-c justify-sb borderD py5"
v-if="item.CustomerPayType == 1 || item.CustomerPayType == 3"
v-if="(item.CustomerPayType == 1 || item.CustomerPayType == 3)&&!pagesTitle"
>
<span class="fz12 c9e">到店自付</span>
<div class="ml">
......@@ -720,7 +728,7 @@
<span class="cF1416C">取消订单</span>
</div>
<div
v-if="item.OrderStatus == 1"
v-if="item.OrderStatus == 1&&pagesTitle!='销售'"
class="row-c cursor-pointer radius5 confirm py5"
@click="clickRightButtom(item, 1)"
>
......@@ -734,6 +742,13 @@
>
<span class="c059FF6">明细/编辑</span>
</div>
<div
v-if="item.OrderStatus == 1&&pagesTitle"
class="row-c cursor-pointer radius5 change py5"
@click="goRoomDetails(item, '酒店预定变更')"
>
<span class="c059FF6">订单变更</span>
</div>
<div
v-if="item.OrderStatus == 2"
class="row-c cursor-pointer radius5 change1 py5"
......@@ -848,7 +863,7 @@
</template>
<script>
export default {
props: ["OrderList"],
props: ["OrderList","pagesTitle"],
data() {
return {
copyId: 0,
......@@ -880,11 +895,57 @@ export default {
},
cancelOrderDialog: false,
cancelRemark: "",
cancelOrderId:0
cancelOrderId:0,
uploadOrderId: 0,
loading: false,
fileList:[],
GuestFile: ''
};
},
watch: {
pagesTitle(val,oldval){
},
},
methods: {
uploadFileBtn(file){
let ft = file.file.name.substring(file.file.name.lastIndexOf('.') + 1, file.file.name.length).toUpperCase();
let typeOk = false;
let FileName = file.file.name.substring(0,file.file.name.lastIndexOf("."))
let newArr = [];
newArr.push(file.file)
let path = "/Upload/Temporary/"
this.$message.info(this.$t('tips.shangchuanzhong'))
this.UploadSelfFileT(path, newArr, x => {
this.GuestFile = this.domainManager().ViittoFileUrl + x.data.FilePath
this.uploadHandleChange()
}, 1);
},
// 上传旅客名单
uploadHandleChange(){
let msg = {
OrderId: this.uploadOrderId,
GuestFileList: [this.GuestFile]
}
this.loading = true
this.apipost(
"dict_post_SetSaleOrderGuestFile",msg,
res => {
if (res.data.resultCode == 1) {
this.loading = false;
this.Success(res.data.message);
this.uploadOrderId=0
this.GuestFile=''
this.$emit("success");
} else {
this.Error(res.data.message);
}
},
err => {
this.loading = false;
}
);
},
// 单据详情
openDetails(item) {
let query = {
......@@ -925,7 +986,9 @@ export default {
},
// 订单明细
goRoomDetails(obj, title) {
var path = "roomReservationsDetails";
var path
if(title==='订房详情'){
path = "roomReservationsDetails";
if (this.userInfo.RB_Group_id == 91) {
path = "roomReservationsDetails_swt";
}
......@@ -938,6 +1001,16 @@ export default {
tab: title
}
});
}else{//变更酒店预定
path = "singleProductModifyHotelOrder";
this.$router.push({
name: path,
query: {
id: obj.OrderId,
tab: title
}
});
}
},
clickRightButtom(item, type) {
// 0取消订单 1确认订单
......
......@@ -470,7 +470,7 @@
com_onresize() {
//clientHeight的值由DIV内容的实际高度和CSS中的padding值决定,
var contentsHeight = document.body.clientHeight;
var h = contentsHeight - 50 - 180 - 50;
var h = contentsHeight - 50 - 180 - 100;
if (h < 110) {
return;
}
......@@ -704,7 +704,6 @@
newCars.push(item)
}
})
if(!states){
this.HotelLength = newCars.length
localStorage.removeItem("cars")
......
<style>
</style>
<template>
<div>
<HotelOrderList :pagesTitle="pagesTitle"></HotelOrderList>
</div>
</template>
<script>
import HotelOrderList from '../reservation/HotelOrderList.vue';
export default {
components: { HotelOrderList },
data() {
return {
pagesTitle:'销售',
};
},
methods: {
},
mounted() {
},
};
</script>
<style>
</style>
<style>
.HotelWorkList .has-gutter tr th,
.el-table th.is-leaf {
background-color: #EAEAEA !important;
}
.HotelWorkList .HW_hotelDialog {
width: 900px;
}
.HotelWorkList .Hw_tableOne {
width: 100%;
height: 40px;
background-color: #EAEAEA;
}
.HotelWorkList .Hw_tableOne th {
text-align: center;
}
.HotelWorkList .HotelWorkInput .el-input {
width: 223px;
}
.HotelWorkList .HworkInput .el-input {
width: 110px;
}
</style>
<template>
<div>
<HotelOrderList :pagesTitle="pagesTitle"></HotelOrderList>
</div>
</template>
<script>
import HotelOrderList from '../reservation/HotelOrderList.vue';
export default {
components: { HotelOrderList },
data() {
return {
pagesTitle:'OP',
};
},
methods: {
//获取酒店订单列表
GetList() {
// if(this.msg.StartTime==''){
// this.msg.StartTime = this.getyMDOne()
// }
// if(this.msg.EndTime==''){
// this.msg.EndTime = this.getyMDTwo()
// }
this.loading = true
this.apipost(
"dict_post_GetMySaleCustomerOrderPageList", this.msg,
res => {
this.loading = false
if (res.data.resultCode == 1) {
let data = res.data.data.pageData
let addList = function(arr){
arr.forEach(x=>{
x.list = []
// x.Tax = 0
// x.Tax2 = 0
})
}
addList(data)
data.forEach(item => {
item.DetailList.forEach(x=>{
x.Number = 0
x.PeopleNumber = 0
x.RoomList.forEach(r=>{
x.Number+=r.Number
x.PeopleNumber+=r.PeopleNumber
})
x.Tax = x.TaxesPrice*x.Number
x.Tax2 = x.PriceInTangTax*x.PeopleNumber
x.Money = x.HotelMoeny+x.TaxesPrice
})
})
this.OrderList = data;
this.OrderList.forEach(item=>{
let datas = {
Income: item.Income,
CostMoney: item.CostMoney,
PlatformTax: item.PlatformTax,
Refund: item.Refund,
HandFittingIncome: item.HandFittingIncome,
HandFittingTax: item.HandFittingTax
}
item.list.push(datas)
})
this.total = res.data.data.count;
}else {
this.Error(res.data.message);
}
},
err => {this.loading = false}
);
},
},
mounted() {
},
};
</script>
<style>
</style>
<style scoped>
.ModifyHotelOrder-OrderId{
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 15px;
border-radius: 5px;
background: #ffffff;
font-size: 12px;
margin-top: 15px;
}
.ModifyHotelOrder-OrderId>div{
display: flex;
align-items: center;
}
.ModifyHotelOrder-OrderId>div:first-child{
color: #9E9E9E;
}
.ModifyHotelOrder-OrderId>div:nth-child(2){
color: #E76A42;
}
.ModifyHotelOrder-OrderId>div:nth-child(2)>span{
font-weight: bold;
color: #009EF7;
}
.ModifyHotelOrder-OrderId>div:nth-child(2)>span:first-child{
color: #E65152;
}
.ModifyHotelOrder-OrderId>div:nth-child(3){
color: #F25971;
}
.ModifyHotelOrder-OrderId>div:nth-child(3)>span:first-child{
font-size: 16px;
}
.ModifyHotelOrder-OrderId>div:nth-child(3)>b{
font-size: 20px;
}
.ModifyHotelOrder-OrderId>div:last-child{
display: flex;
font-size: 16px;
}
.ModifyHotelOrder-OrderInfor{
padding: 10px 15px;
border-radius: 5px;
background: #ffffff;
margin-top: 15px;
}
.ModifyHotelOrder-OrderInfor p{
color: #C1C1C1;
font-size: 14px;
}
.ModifyHotelOrder-content{
display: flex;
align-items: flex-start;
flex-wrap: wrap;
margin-top: 15px;
}
.content-box{
width: 320px;
display: flex;
flex-direction: column;
background: #ffffff;
border-radius: 5px;
margin-right: 15px;
overflow: hidden;
}
.content-header{
display: flex;
justify-content: space-between;
align-items: center;
padding: 15px 10px;
}
.content-header span{
font-size: 17px;
}
.content-header i{
color: #009EF7;
cursor: pointer;
}
.content-header i:last-child{
color: #F1416C;
margin-left: 15px;
}
.content-Car{
background: #ECEFF1;
border-radius: 5px;
padding: 10px 5px;
margin: 0 10px;
margin-bottom: 10px;
font-size: 12px;
}
.content-Car-title{
font-size: 14px;
font-weight: 400;
color: #009EF7;
padding: 0 5px;
display: flex;
justify-content: space-between;
border-bottom: 1px dashed rgba(96, 125, 139, 0.2);
margin-bottom: 5px;
}
.content-Car-title span{
width: 80%;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.content-Car-title i{
color: #F1416C;
cursor: pointer;
display: none;
}
.content-Car-title:hover .content-Car-title i{
display: block;
}
.content-Car-num{
padding: 7px 5px;
align-items: center;
}
.num-roomtype span{
color: #6F8A96;
padding: 5px 0 0 0;
display: block;
}
.num-roomnum{
color: #9E9E9E;
}
.num-roomnum span{
color: #F5831E;
font-weight: bold;
}
.noroomtype{
padding: 10px 5px;
color: #6F8A96;
font-size: 12px;
}
.content-Car-shui{
display: flex;
justify-content: space-between;
align-items: center;
font-size: 14px;
color: #6F8A96;
border-top: 1px dashed rgba(96, 125, 139, 0.2);
border-bottom: 1px dashed rgba(96, 125, 139, 0.2);
padding: 7px 0;
margin: 0 5px;
}
.content-Car-heji{
padding: 7px 5px 0 0;
display: flex;
justify-content: end;
font-size: 14px;
color: #1CA8F6;
}
.content-Car-heji span span{
font-size: 15px;
font-weight: bold;
}
.content-picker-text{
height: 240px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-size: 14px;
}
.content-picker-text>div:first-child span{
border: 1px solid #47B6F5;
padding: 5px 15px;
border-radius: 3px;
cursor: pointer;
color: #47B6F5;
}
.content-picker-text>div:last-child{
margin-top: 20px;
}
.content-picker-text>div:last-child span{
color: #A5B5BE;
}
/deep/.content-Car .el-input-number .el-input__inner{
height: 30px;
}
/deep/.content-Car .el-input-number{
width: 106px;
line-height: 30px;
}
/deep/.content-Car .el-input-number__increase{
width: 25px !important;
height: 28px !important;
}
/deep/.content-Car .el-input-number__decrease{
width: 25px !important;
height: 28px !important;
}
/deep/.content-Car .el-input-number .el-input__inner{
padding-left: 20px;
padding-right: 20px;
}
</style>
<template>
<div>
<div class="ModifyHotelOrder-OrderId">
<div>
订单编号
</div>
<div>本次行程<span>5</span>天,入住<span>5</span>个酒店</div>
<div>订单总金额:<span>¥</span><b>175.000</b></div>
<div>
<button class="hollowFixedBtn">取消订单</button>
<button class="normalBtn">保存订单</button>
</div>
</div>
<div class="ModifyHotelOrder-OrderInfor">
<p>订单信息</p>
<div>
<el-form label-width="60px" :model="parameters" :rules="rules" ref="parameters">
<el-row :gutter="20">
<el-col :span="4">
<el-form-item label="类型" prop="OrderType">
<el-select v-model="parameters.OrderType">
<el-option v-for="item in cacheHotels" :key="item.ID" :label="item.Name" :value="item.ID"></el-option>
</el-select>
</el-form-item>
</el-col>
<template v-if="parameters.OrderType==1">
<el-col :span="4">
<el-form-item label="姓名" prop="ContactName">
<el-input v-model="parameters.ContactName"></el-input>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="电话" prop="ContactNumber">
<el-input v-model="parameters.ContactNumber"></el-input>
</el-form-item>
</el-col>
</template>
<el-col :span="4" v-else>
<el-form-item label="团号" prop="TCNum">
<el-input v-model="parameters.TCNum"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="备注" prop="">
<el-input placeholder="请输入备注" v-model="parameters.Remark"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<div class="ModifyHotelOrder-content">
<div>
<div class="content-box">
<div class="content-header">
<span>日期</span>
<div>
<i class="el-icon-plus"></i>
<i class="el-icon-delete-solid"></i>
</div>
</div>
<div>
<div class="content-Car" v-for="item in 3">
<p class="content-Car-title">
<span>酒店名称</span>
<i class="el-icon-delete-solid"></i>
</p>
<div class="content-Car-num">
<el-row :gutter="20" style="display: flex;align-items: center;justify-content: space-between;">
<el-col :span="7">
<div class="num-roomtype">
<p>标间</p>
<span>785/人</span>
</div>
</el-col>
<el-col :span="7">
<p class="num-roomnum">预计<span>1</span>间房</p>
</el-col>
<el-col :span="10">
<el-input-number v-model="num" :min="0" :step="1" step-strictly></el-input-number>
</el-col>
</el-row>
</div>
<div class="noroomtype">无其他可用房型</div>
<div class="content-Car-shui">
<span>城市税: 0/人</span>
<span>入汤税: 0/人</span>
</div>
<div class="content-Car-heji">
<span>合计:<span>¥185255</span></span>
</div>
</div>
</div>
</div>
</div>
<div class="content-box">
<div class="content-header">
<span>新日期预定</span>
<div>
<el-date-picker class="w150" v-model="dates" type="date" value-format="yyyy-MM-dd" placeholder="请选择日期"></el-date-picker>
</div>
</div>
<div class="content-Car content-picker-text">
<div>
<span>选择酒店</span>
</div>
<div>
<span>*<span>请先选择需要预定的日期</span></span>
</div>
</div>
</div>
</div>
<el-dialog custom-class="w800" title="酒店检索" :visible.sync="showChosenHotel" center>
<ChosenHotel @close="close"></ChosenHotel>
</el-dialog>
</div>
</template>
<script>
import ChosenHotel from './components/ChosenHotel.vue';
export default {
components: { ChosenHotel },
data() {
return {
dates: new Date(),
num:0,
showChosenHotel: true,
parameters:{
Money: 0,
DetailList: [],
Remark: '',
OrderType: 1, //订单类型 1散客 2团队
TCNum: '', //=团队时 传递 组团号
ContactName: '', //=散客时 传递 联系人
ContactNumber: '', //=散客时 传递 联系人电话
OrderId: 0
},
cacheHotels: [
{ Name: '散客', ID: 1 },
{ Name: '团队', ID: 2 }
],
rules:{
OrderType: [{
required: true,
message: '请选择类型',
trigger: 'change'
}],
ContactName: [{
required: true,
message: '请输入散客姓名',
trigger: 'blur'
}],
ContactNumber: [
{ required: true, message: "请输入联系电话", trigger: "blur" },
{
pattern: this.$commonUtils.Regex.el_ISphone,
message: "请输入正确的电话"
}
],
TCNum: [{
required: true,
message: '请输入团号',
trigger: 'blur'
}],
}
};
},
methods: {
close(){
}
},
mounted() {
},
};
</script>
<style>
</style>
<template>
<div>
<div class="query-box" style="border-bottom: none;">
<ul>
<li>
<span>
<em>{{$t('system.quety_area')}}</em>
<el-select class="option" v-model="msg.Province" filterable @change="getProvinceList(msg.Province,2)"
:placeholder="$t('hotel.hotel_province')">
<el-option :key="0" :value="0" label="请选择"></el-option>
<el-option v-for="item in provinceList" :key="item.ID" :label="item.Name" :value="item.ID"></el-option>
</el-select>
<el-select class="option" v-model="msg.City" filterable :placeholder="$t('hotel.hotel_city')">
<el-option :key="0" :value="0" label="请选择"></el-option>
<el-option v-for="item in cityList" :key="item.ID" :label="item.Name" :value="item.ID"></el-option>
</el-select>
</span>
</li>
<li><span><em>日期</em>
<el-date-picker class="w140" v-model='msg.StartDate' value-format="yyyy-MM-dd" type="date"
:picker-options="beforeCheck">
</el-date-picker>
<el-date-picker class="w140" v-model='msg.EndDate' value-format="yyyy-MM-dd" type="date" :picker-options="afterCheck">
</el-date-picker>
</span>
</li>
<li>
<span>
<em>酒店</em>
<el-select v-model="msg.HotelChooseArray" :placeholder="$t('pub.pleaseSel')" class="multiple_input HotelChooseArray"
filterable multiple :multiple-limit="3">
<el-option v-for="item in HotelList" :key="item.ID" :label="item.Name" :value="item.ID"></el-option>
</el-select>
</span>
</li>
<li>
<span>
<em>星级</em>
<el-select class="Star" v-model="msg.Star" :placeholder="$t('pub.pleaseSel')">
<el-option :label="$t('pub.unlimitedSel')" :value='0'></el-option>
<el-option label="3星或商务" :value='3'></el-option>
<el-option label="4星" :value='4'></el-option>
<el-option label="5星" :value='5'></el-option>
</el-select>
</span>
</li>
<li>
<span>
<em>价格区间</em>
<el-input class="w80" type="Number" v-model="msg.MinPrice"></el-input>
<span style="padding: 0 10px;">-</span>
<el-input class="w80" type="Number" v-model="msg.MaxPrice"></el-input>
</span>
</li>
<li style="position: inherit;">
<input type="button" class="normalBtn" value="查询" @click="getList()" />
</li>
</ul>
</div>
<div style="width: 100%;min-height:200px; overflow-x: auto;padding-bottom: 10px; " class="HotelQueryList"
v-loading="loading">
<div class="hotelProductManage2_tableBox" style="margin-bottom:20px;">
<span style="color:#000000;background-color: #ff3737;padding:2px 4px;border-radius:5px">红日</span>
<span style="color:#000000;background-color: #ff99cc;padding:2px 4px;border-radius:5px">旺季</span>
<span style="color:#000000;background-color: #bcd6ee;padding:2px 4px;border-radius:5px">平季</span>
<span style="color:#000000;background-color: #DDDDDD;padding:2px 4px;border-radius:5px">淡季</span>
<span style="color:#000000;background-color: #02F78E;padding:2px 4px;border-radius:5px">特别价</span>
<span style="color:#000000;background-color: #808000;padding:2px 4px;border-radius:5px">行前日</span>
</div>
<template v-if="isShow">
<el-table v-if="dataList.length>0" :data="dataList" style="width:100%" border v-loading='loading'
:height="tableHeight">
<el-table-column fixed label="酒店名称" min-width="180">
<template slot-scope="scope">
<!-- @click="GotoHotel(scope.row.HotelId)" -->
<div style="text-decoration: underline;cursor:pointer" @click="showHotelDetailHandler(scope.row.HotelId)">
{{scope.row.HotelName}}</div>
<div>{{scope.row.TotalInventory}}</div>
</template>
</el-table-column>
<el-table-column label="价格&库存" fixed min-width="120">
<template slot-scope="scope">
<div class="Hotel_kong">价格</div>
<div class="Hotel_kong" style="min-width:60px;">总/用/剩</div>
<div class="Hotel_kong">确认/预定</div>
<div class="Hotel_kong">超定</div>
</template>
</el-table-column>
<el-table-column v-for='(item,index) in dataList[0].subList' :label="getDateList(item.DateStr)" :key='index'
min-width="120">
<template slot-scope="scope">
<div @click="showOrderSubmitHandler(scope.row,0,index)">
<div class="Hotel_kong Com_hoteldiv">
<template v-if="scope.row.subList[index].PriceList.length>0">
<template v-for="childItem in scope.row.subList[index].PriceList">
<div :class="getClass(1,childItem.InventoryType)"
:style="{width:(100/scope.row.subList[index].PriceList.length)+'%'}" class="CostPriceHover">
<el-popover
placement="bottom"
width="300"
trigger="hover">
<SamplePriceList
v-if="
scope.row.subList[index].PriceList[0].BidroomPrice>0||
scope.row.subList[index].PriceList[0].SingleroomPrice>0||
scope.row.subList[index].PriceList[0].AddBedPrice>0||
scope.row.subList[index].PriceList[0].GuideRoomPrice>0" :price="scope.row.subList[index]"></SamplePriceList>
<div v-else style="text-align: center;width: 100%;">没有其他房型报价</div>
<span slot="reference" class="CostPriceHover">{{childItem.CostPrice}}</span>
</el-popover>
</div>
</template>
</template>
<template v-else>
<div :class="getClass(0,0)" style="width:100%;height:100%">&nbsp;</div>
</template>
</div>
<div class="Hotel_kong Com_hoteldiv Hq_duoge">
{{item.Inventory}}/{{item.UseInventory}}/{{item.RemainingInventory}}
</div>
<div class="Hotel_kong Com_hoteldiv">
{{item.ConfirmNum}}/{{item.ReserveNum}}
</div>
<div class="Hotel_kong Com_hoteldiv">
<span v-if="item.UseInventory-item.Inventory>0"
style="color:red;">
{{item.UseInventory-item.Inventory}}
</span>
</div>
</div>
</template>
</el-table-column>
</el-table>
<div class="noDataNotice" v-else>
<i class="iconfont icon-kong"></i>
<p>{{$t("active.ld_noData")}}</p>
</div>
<el-pagination v-if="dataList.length>0" background @current-change="handleCurrentChange"
:current-page.sync="msg.pageIndex"
layout="total,prev, pager, next, jumper" :page-size='msg.pageSize' :total='total'></el-pagination>
</template>
</div>
</div>
</template>
<script>
import SamplePriceList from './SamplePriceList'
import TableOperation from './TableOperation'
import ListCar from './ListCar'
import hotelDetails from './hotelDetails'
export default {
components: { SamplePriceList,TableOperation,ListCar,hotelDetails },
data() {
return {
showHotelDetails: false,
HotelDetailId: 0,
editorType:0,
rightCarOpen: false,
HotelLength: 0,
orderSubmitItemObj: {},
orderSubmitObj: {},
showOrderPreview: false,
total:0,
pickerOptions: {
disabledDate(time) {
return time.getTime() > Date.now();
}
},
msg: {
pageIndex: 1,
pageSize: 10,
//酒店选择数组
HotelChooseArray: [],
StartDate: this.getBeforeDate(-20,new Date().Format("yyyy-MM-dd")),
EndDate: this.getBeforeDate(-30,this.getBeforeDate(-20,new Date().Format("yyyy-MM-dd"))),
//只查询日本
Country: "651",
Province: 0,
City: 0,
OutBranchId: -1,
//星级
Star: 0,
//价格等级
PriceLevel: 0,
//供应商
Supplier: 0,
MaxPrice: 0,
MinPrice: 0
},
tableHeight: 0,
beforeCheck: {
disabledDate: time => {
if (this.msg.StartDate) {
let endTime = new Date(this.getBeforeDate(-20,new Date().Format("yyyy-MM-dd")));
return time && endTime.getTime() >= time.getTime();
} else {
return false;
}
}
},
afterCheck: {
disabledDate: time => {
if (this.msg.StartDate) {
let startTime = new Date(this.msg.StartDate);
//可以选择当天
return time && time.getTime() < startTime.getTime() - 1 * 24 * 60 * 60 * 1000;
} else {
return false;
}
}
},
//分公司列表
companyList: [],
defaultSelectValue: 0,
//国家 省市 区
provinceList: [],
cityList: [],
district: [],
queryMsg: {
QStartDate: '',
QEndDate: '',
pageIndex: 1,
pageSize: 5,
currentPage: 1,
total: 0,
OpType: 0
},
postMsg: {
Id: 0,
TipContent: '',
OpType: 0,
},
//默认显示弹窗信息
showHQinfo: false,
//酒店温馨提示列表
HotelTipList: [],
//供应商列表
SupplierList: [],
HotelList: [],
dataList: [],
isShow: false,
loading: false,
showNotice: false,
pickerBeginDateBefore: {
disabledDate: time => {
let endTime = new Date(this.queryMsg.QStartDate)
return endTime.getTime() < time.getTime()
}
},
pickerBeginDateAfter: {
disabledDate: time => {
let startTime = new Date(this.queryMsg.QEndDate)
return startTime.getTime() >= time.getTime()
}
},
editorOption: {
placeholder: '请输入内容',
modules: {
toolbar: [
['bold', 'italic', 'underline', 'strike'], // toggled buttons
['blockquote', 'code-block', 'align']
]
}
},
HOTEL_memorandum: false
};
},
methods: {
removeEditor(){
localStorage.removeItem('editor')
},
// 酒店信息详情
showHotelDetailHandler(hotelId){
this.HotelDetailId = hotelId
this.showHotelDetails = true
},
// 编辑购物车
editor(x){
this.dataList.forEach((item,index) => {
if(item.HotelId==x.HotelId){
item.subList.forEach(xs=>{
if(xs.DateStr==x.Date){
this.rightCarOpen = false
this.showOrderSubmitHandler(item,index,1)
}
})
}
})
},
// 提交预约成功
success(){
this.close()
this.getList()
},
// 取消
close(){
this.HotelLength = localStorage.getItem("HotelLength")?localStorage.getItem("HotelLength"):0
this.showOrderPreview = false
this.rightCarOpen = false
this.showHotelDetails = false
localStorage.removeItem("editor")
},
// 加入购物车
showOrderSubmitHandler(row,type,index){
this.orderSubmitObj = row
this.orderSubmitItemObj = row.subList[index]
this.showOrderPreview = true
this.editorType = type?type:0
},
goUrl(name, id) {
this.$router.push({
name: name,
query: {
blank: "y",
tab: "备忘录"
}
});
},
// 获取供应商
initSupplier() {
this.apipost("supplier_post_GetAllList", {
Type: 1
}, res => {
if (res.data.resultCode === 1) {
this.SupplierList = res.data.data;
}
}, err => {});
},
GotoHotel(HotelId) {
this.$router.push({
path: "HotelManagement",
query: {
ID: HotelId,
tab: "酒店查询",
blank: 'y',
}
});
},
GotoUrl(item, subIndex, UseInventory) {
if (UseInventory > 0) {
this.$router.push({
path: "TravelControlList",
query: {
HotelId: item.HotelId,
HotelUseTime: item.subList[subIndex].DateStr,
IsUnionCked: 0,
blank: 'y',
tab: "团控查询",
}
});
}
},
com_onresize() {
//clientHeight的值由DIV内容的实际高度和CSS中的padding值决定,
var contentsHeight = document.body.clientHeight;
var h = contentsHeight - 50 - 180 - 100;
if (h < 110) {
return;
}
//设置table的行高
this.tableHeight = h;
},
getList() {
this.loading = true;
if (this.msg.StartDate == null) {
this.msg.StartDate = this.getBeforeDate(-20,new Date().Format("yyyy-MM-dd"));
}
if (this.msg.EndDate == null) {
this.msg.EndDate = this.getBeforeDate(-30,this.getBeforeDate(-20,new Date().Format("yyyy-MM-dd")));
}
this.apipost("dict_post_HotelOffer_GetClientHotelStatics", this.msg,
res => {
this.loading = false;
if (res.data.resultCode == 1) {
this.dataList = res.data.data.pageData;
this.total = res.data.data.count
this.isShow = true;
} else {
this.Error(res.data.message);
}
},
err => {}
);
},
//获取酒店列表
GetHotelList() {
this.apipost(
"hotel_post_GetHasStockHotelList", {
QCountry: "651",
IsMoreThanZero: 1
},
res => {
if (res.data.resultCode == 1) {
this.HotelList = res.data.data;
}
},
err => {}
);
},
setEdate() {
return this.addMoth(new Date().Format("yyyy-MM-dd"), 1)
},
addMoth(d, m) {
let ds = d.split('-'),
_d = ds[2] - 0;
let nextM = new Date(ds[0], ds[1] - 1 + m + 1, 0);
let max = nextM.getDate();
d = new Date(ds[0], ds[1] - 1 + m, _d > max ? max : _d);
return d.toLocaleDateString().match(/\d+/g).join('-')
},
//格式化返回显示日期
getDateList(dateStr) {
var str = dateStr.split('-');
var weekDay = ["天", "一", "二", "三", "四", "五", "六"];
var myDate = new Date(Date.parse(dateStr));
return str[1] + '/' + str[2] + "(" + weekDay[myDate.getDay()] + ")";
},
//获取星期几
getWeek(dateStr) {
var weekDay = ["天", "一", "二", "三", "四", "五", "六"];
var myDate = new Date(Date.parse(dateStr));
return weekDay[myDate.getDay()]
},
//获取颜色状态
getClass(Status, InventoryType) {
var classStr = "";
if (Status == 0) {
classStr = 'noKucun';
}
switch (InventoryType) {
case 1:
classStr = "classHong";
break;
case 2:
classStr = "classWang";
break;
case 3:
classStr = "classPing";
break;
case 4:
classStr = "classDan";
break;
case 5:
classStr = "classTe";
break;
case 6:
classStr = "hotelQueryListclass6"
break;
}
return classStr;
},
handleCurrentChange(val) {
this.msg.pageIndex = val;
this.getList();
},
resetPageIndex() {
this.queryMsg.pageIndex = 1;
this.queryMsg.currentPage = 1;
},
//获取酒店列表
GetHotelTipList() {
this.apipost(
"hoteltip_get_GetPageList", this.queryMsg,
res => {
if (res.data.resultCode == 1) {
this.HotelTipList = res.data.data.pageData;
this.queryMsg.total = res.data.data.count;
}
},
err => {}
);
},
SaveHotelTip() {
this.apipost(
"hoteltip_post_SetHotelTip", this.postMsg,
res => {
if (res.data.resultCode == 1) {
this.Success("保存成功!");
this.postMsg.Id = 0;
this.postMsg.TipContent = "";
this.GetHotelTipList();
} else {
this.Error("保存失败!");
}
},
err => {}
);
},
RemoveHotelTip(Id) {
var that = this;
this.Confirm('是否要删除此数据?', function () {
that.apipost(
"hoteltip_post_RemoveHotelTip", {
ID: Id
},
res => {
if (res.data.resultCode == 1) {
that.Success("删除成功!");
that.GetHotelTipList();
} else {
that.Error("删除失败!");
}
},
err => {}
);
})
},
GetHotelTip(Id) {
this.apipost(
"hoteltip_get_GetHotelTip", {
ID: Id
},
res => {
if (res.data.resultCode == 1) {
this.postMsg.Id = res.data.data.Id;
this.postMsg.TipContent = res.data.data.TipContent;
} else {
this.Error("获取数据失败!");
}
},
err => {}
);
},
getProvinceList(ID, type) {
//根据省份获取城市
let msg = {
Id: ID
};
if (type == 1) {
this.msg.Province = 0;
this.msg.City = 0;
this.provinceList = [];
this.cityList = [];
} else if (type == 2) {
this.msg.City = 0;
this.cityList = [];
}
this.apipost(
"dict_post_Destination_GetChildList",
msg,
res => {
if (type == 1) {
this.provinceList = res.data.data;
} else if (type == 2) {
this.cityList = res.data.data;
}
},
err => {}
);
},
getBranchList() {
let UserInfo = this.getLocalStorage();
this.apipost('admin_get_BranchGetList', {
RB_Group_Id: UserInfo.RB_Group_id,
Status: 0,
}, res => {
if (res.data.resultCode == 1) {
this.companyList = res.data.data;
}
}, err => {})
},
//Excel下载
DownLoadHotelQuery() {
this.loading = true;
let qMsg = {
queryMsg: this.msg,
uid: this.getLocalStorage().EmployeeId
};
let fileName = "酒店查询统计" + this.$commonUtils.getCurrentDate() + ".xls";
this.GetLocalFile("hotel_get_downloadHotelQuery", qMsg, fileName,
res => {
this.loading = false;
});
},
},
mounted() {
// 当前日期小于20天更新数据
let oldCars = []
let newCars = []
let states = true
oldCars = JSON.parse(localStorage.getItem("cars"))
oldCars.forEach(item=>{
if(item.Date<this.getBeforeDate(-20,new Date().Format("yyyy-MM-dd"))){
states = false
}else{
newCars.push(item)
}
})
if(!states){
this.HotelLength = newCars.length
localStorage.removeItem("cars")
localStorage.setItem("cars",JSON.stringify(newCars))
localStorage.removeItem('HotelLength')
localStorage.setItem('HotelLength',JSON.stringify(this.HotelLength))
}
this.HotelLength = localStorage.getItem("HotelLength")?localStorage.getItem("HotelLength"):0
let userinfo = this.getLocalStorage();
let ActionMenuCode = userinfo.ActionMenuCode;
if (ActionMenuCode.indexOf("HOTEL_memorandum") != -1) {
this.HOTEL_memorandum = true;
}
this.initSupplier();
this.getBranchList();
this.getProvinceList("651", 1);
this.GetHotelList();
this.getList();
this.GetHotelTipList();
this.com_onresize();
window.onresize = () => {
this.com_onresize();
}
}
};
</script>
<style scoped>
.Hq_duoge {
cursor: pointer;
text-decoration: underline;
}
.HqCom_bottom .ql-container {
min-height: 100px;
}
.classHong {
background-color: rgb(255, 55, 55);
color: #fff;
}
.classWang {
background-color: rgb(255, 153, 204);
}
.classPing {
background-color: rgb(188, 214, 238);
}
.classDan {
background-color: rgb(221, 221, 221);
}
.classTe {
background-color: rgb(2, 247, 142);
}
.hotelQueryListclass6 {
background-color:#808000;
}
.HouseTypeList {
background: #ccc;
width: 100%;
margin-top: 20px;
}
.Com_hoteldiv {
min-width: 70px;
white-space: nowrap;
}
.noKucun {
background-color: black !important;
}
.Hotel_kong {
width: 100%;
height: 35px;
text-align: center;
line-height: 35px;
border-bottom: 1px solid #d1d1d1;
}
.Hotel_kong:last-child {
border: 0;
}
.HouseTypeList tr th {
background: #e6e6e6;
height: 35px;
font-size: 12px;
color: #333;
}
.HouseTypeList tr {
background: #fff;
text-align: center;
height: 35px;
}
.HouseTypeList tr td {
font-size: 12px;
}
.hotelProductManage2_tableBox span {
margin: 0 10px 10px 0;
}
.Hq_addDetail {
margin-top: 20px;
}
.Hq_addDetail .el-textarea__inner {
resize: none;
}
.Hq_addTable .el-button.is-circle {
padding: 5px;
}
.HqCom_bottom .el-form-item {
margin-bottom: 0
}
.HqCom_bottom {
height: 350px;
padding-top: 35px;
}
.HQ_miaoshu {
color: #E95252;
font-size: 12px;
}
.HQ_miaoshu:first-child {
margin-top: 10px;
}
.HotelQueryList .has-gutter tr th,
.el-table th.is-leaf {
background: #EAEAEA !important;
}
.HotelQueryList .el-table td,
.el-table th.is-leaf {
border-bottom: 1px solid #ebeef5;
}
.HotelQueryList .el-table .cell {
padding: 0;
}
.HotelQueryList .el-table td {
padding: 0;
}
.CostPriceHover{
height:100%;
float:left;
width:100%;
cursor: pointer;
}
.query-box li{
margin: 0 0 10px 0;
}
.query-box li span>em{
min-width: 58px;
}
/deep/.query-box .option .el-input{
width: 120px !important;
}
/deep/.query-box .HotelChooseArray .el-input{
width: 120px !important;
}
/deep/.query-box .Star .el-input{
width: 100px !important;
}
</style>
\ No newline at end of file
<style scoped>
.row {
display: flex;
}
.row-c {
display: flex;
align-items: center;
}
.column {
display: flex;
flex-direction: column;
}
.column-jac {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.column-ac {
display: flex;
flex-direction: column;
align-items: center;
}
.wrap {
flex-wrap: wrap;
}
.justify-sb {
justify-content: space-between;
}
.justify-c {
justify-content: center;
}
.justify-e {
justify-content: flex-end;
align-items: flex-end;
}
.flex-g {
flex-grow: 1;
}
.flex-s {
flex-shrink: 0;
}
.align-c {
align-items: center;
}
.cblack {
color: black;
}
.cf {
color: #ffffff;
}
.c9e {
color: #9e9e9e;
}
.c20C997 {
color: #20c997;
}
.c02C854 {
color: #02c854;
}
.cff9800 {
color: #ff9800;
}
.cF1416C {
color: #f1416c;
}
.cF57A98 {
color: #f57a98;
}
.c04C8C8 {
color: #04c8c8;
}
.c059FF6 {
color: #059ff6;
}
.c3FC4FF {
color: #3fc4ff;
}
.fz10 {
font-size: 10px;
}
.fz11 {
font-size: 11px;
}
.fz12 {
font-size: 12px;
}
.fz13 {
font-size: 13px;
}
.fz14 {
font-size: 14px;
}
.fz15 {
font-size: 15px;
}
.fz16 {
font-size: 16px;
}
.fz17 {
font-size: 17px;
}
.fz18 {
font-size: 18px;
}
.fbold {
font-weight: bold;
}
.ml {
margin-left: 10px;
}
.mr {
margin-right: 10px;
}
.mt {
margin-top: 10px;
}
.mt20 {
margin-top: 20px;
}
.mb {
margin-bottom: 10px;
}
.mb20 {
margin-bottom: 20px;
}
.mx {
margin-left: 10px;
margin-right: 10px;
}
.mx5 {
margin-left: 5px;
margin-right: 5px;
}
.mb5 {
margin-bottom: 5px;
}
.py {
padding: 15px 0;
}
.py5 {
padding: 5px 0;
}
.px5 {
padding: 0 5px;
}
.px15 {
padding: 0 15px;
}
.pa15 {
padding: 15px;
}
.py20 {
padding: 20px 0;
}
.pb5 {
padding: 0 0 5px 0;
}
.pa {
padding: 10px 20px;
}
.pa20 {
padding: 20px;
}
.pt20 {
padding: 20px 0;
}
.borderD {
border-bottom: 1px dashed #dddddd;
}
.bgf {
background: #ffffff;
}
.bgf5 {
background: #f5f5f5;
}
.bgE8F5E9 {
background: #e8f5e9;
}
.bgD9F3FF {
background: #d9f3ff;
}
.bgFAEAED {
background: #faeaed;
}
.bj {
background: #ffffff;
}
.radius5 {
border-radius: 5px;
}
.cursor-pointer {
cursor: pointer;
}
.relative {
position: relative;
}
.absolute {
position: absolute;
}
.left0 {
left: 0;
}
.right0 {
right: 0;
}
.top0 {
top: 0;
}
.bottom0 {
bottom: 0;
}
.left20 {
left: 020px;
}
.right20 {
right: 20px;
}
.top20 {
top: 20px;
}
.bottom20 {
bottom: 20px;
}
.text-center {
text-align: center;
}
.orderType {
padding: 3px 15px;
border-radius: 3px;
background: #f57a98;
margin-right: 15px;
}
.orderType.active {
background: #4dd0e1;
}
.copy {
display: inline-block;
padding: 3px 15px;
border-radius: 3px;
margin-left: 20px;
}
.copy:hover {
background: #f5f5f5;
}
.see-rec div {
padding: 1px 5px;
border-radius: 3px;
}
.see {
border: 1px solid #04c8c8;
}
.seeLK {
border: 1px solid #059ff6;
}
.see:hover {
background-color: rgba(4, 200, 200, 0.1);
}
.rec {
border: 1px solid #04c8c8;
background-color: rgba(4, 200, 200, 1);
}
.rec:hover {
border: 1px solid rgba(4, 200, 200, 0.9);
background-color: rgba(4, 200, 200, 0.9);
}
.cancel:hover {
background-color: #f3dce2;
}
.confirm:hover {
background-color: #dcedc8;
}
.change:hover {
background-color: #d7e9f3;
}
.change1:hover {
background-color: #dcedc8;
}
.orderop {
text-align: center;
}
.orderop div {
width: 100px;
height: 50%;
display: flex;
justify-content: center;
}
.RoomList div {
border-bottom: 1px solid #e7e7e7;
}
.RoomList div:last-child {
border: 0;
}
.el-table {
font-size: 13px;
}
.shezhifrom {
position: relative;
}
.shebox {
position: absolute;
top: 0;
left: -100px;
display: none;
}
.shezhifrom:hover .shebox {
display: block;
}
</style>
<template>
<div>
<div
v-for="(item, index) in OrderList"
class="column bgf radius5 px15 mb20"
>
<div class="row-c justify-sb align-c py">
<div class="row-c">
<div>
<div
class="orderType cf fz12"
:class="{ active: item.OrderType == 1 }"
>
{{ item.OrderType == 1 ? "散拼订房" : "团队订房" }}
</div>
</div>
<div class="c9e fz12">
<span>订单编号:</span>
<span>{{ item.OrderNo }}</span>
<span
class="copy cblack cursor-pointer"
v-if="copyId != item.OrderId"
@click="CopyHandler(item)"
>复制</span
>
<span class="copy c059FF6 bgD9F3FF cursor-pointer" v-else
><i class="el-icon-check mr"></i>已复制</span
>
</div>
</div>
<div class="c9e fz12">
<span v-if="item.OrderType == 1"
>联系人信息:{{ item.ContactName }}/{{ item.ContactNumber }}</span
>
<span v-else>组团号:{{ item.TCNum }}</span>
</div>
<div class="row c9e fz12">
<span>销售:</span>
<span class="mr">
{{ item.SaleName }}
</span>
<span class="mr">创建人:</span>
<span class="mr"
>{{ item.CustomerName }} ({{ item.CustomerContact }}/{{
item.CustomerTel
}})</span
>
<span>下单时间:</span>
<span class="mr">{{ item.CreateTime }}</span>
<div class="">
<i
class="mx5"
:class="{
'el-icon-alarm-clock c20C997': item.OrderStatus == 1,
'el-icon-check cblack': item.OrderStatus == 2,
'el-icon-warning cff9800': item.OrderStatus == 3,
'el-icon-refresh cF1416C': item.OrderStatus == 4
}"
></i>
<span
class="fz12 cblack"
:class="{
c20C997: item.OrderStatus == 1,
cblack: item.OrderStatus == 2,
cff9800: item.OrderStatus == 3,
cF1416C: item.OrderStatus == 4
}"
>
{{ item.OrderStatusName }}
</span>
</div>
</div>
</div>
<div class="mb">
<el-table :data="item.DetailList" style="width:100%" border>
<el-table-column
label="入住日期"
min-width="100"
style="background:#EAEAEA"
>
<template slot-scope="scope">
{{ scope.row.Date }}
</template>
</el-table-column>
<el-table-column label="酒店名称" style="background:#EAEAEA">
<template slot-scope="scope">
{{ scope.row.HotelName }}
</template>
</el-table-column>
<el-table-column min-width="240">
<template slot="header" slot-scope="scope">
<span>入驻信息</span>
<el-tooltip
class="item"
effect="dark"
content="按照入住人数*房型单价=房型总价小计(不含稅)"
placement="bottom"
>
<i class="el-icon-question c059FF6 cursor-pointer"></i>
</el-tooltip>
</template>
<template slot-scope="scope">
<div class="RoomList">
<div class="fz12 c9e" v-for="(x, i) in scope.row.RoomList">
<span class="mr"
>{{ x.RoomTypeName }}{{ x.Number }} 人间</span
>
<span class="ml mr">人数:{{ x.PeopleNumber }}</span>
<span class="ml mr">单价:{{ x.Unit_Price }}</span>
<span class="ml"
>小计:{{ x.Money }} {{ scope.row.CurrencyName }}</span
>
</div>
</div>
</template>
</el-table-column>
<el-table-column label="订房号" min-width="100">
<template slot-scope="scope">
<span
v-if="!scope.row.ReserveRoomNo"
class="radius5 bgFAEAED cF1416C px5 fz12"
>未确认</span
>
<template v-else>
<span class="radius5 bgE8F5E9 c20C997 px5 fz12">{{
scope.row.ReserveRoomNo
}}</span>
</template>
</template>
</el-table-column>
<el-table-column label="城市税" min-width="60">
<template slot-scope="scope">
{{ scope.row.Tax > 0 ? scope.row.Tax.toFixed(2) : "-" }}
</template>
</el-table-column>
<el-table-column
label="入汤税"
min-width="60"
style="background:#EAEAEA"
>
<template slot-scope="scope">
{{ scope.row.Tax2 > 0 ? scope.row.Tax2.toFixed(2) : "-" }}
</template>
</el-table-column>
<el-table-column
label="小计"
min-width="70"
style="background:#EAEAEA"
>
<template slot-scope="scope">
{{ scope.row.HotelMoeny.toFixed(2) }}
</template>
</el-table-column>
<el-table-column
label="付款方式"
min-width="80"
style="background:#EAEAEA"
>
<template slot-scope="scope">
{{ scope.row.CustomerPayType == 1 ? "到店自付" : "出发前付款" }}
</template>
</el-table-column>
<el-table-column
label="手配費"
min-width="80"
style="background:#EAEAEA"
>
<template slot-scope="scope">
{{ item.HandFittingFee ? item.HandFittingFee : "-" }}
</template>
</el-table-column>
<template v-slot:append v-if="item.Remark">
<div style="padding:10px;color:#f1416c">客户备注:{{item.Remark}}</div>
</template>
</el-table>
</div>
<el-table :data="item.list" style="width:100%" border v-if="item.OrderStatus!=3">
<el-table-column label="实收" min-width="100">
<template slot-scope="scope">
<span>{{ scope.row.Income ? scope.row.Income : "-" }}</span>
</template>
</el-table-column>
<el-table-column label="成本" min-width="100">
<template slot-scope="scope">
<span>{{ scope.row.CostMoney ? scope.row.CostMoney : "-" }}</span>
</template>
</el-table-column>
<el-table-column label="平台税金" min-width="100">
<template slot-scope="scope">
<span>{{
scope.row.PlatformTax ? scope.row.PlatformTax : "-"
}}</span>
</template>
</el-table-column>
<el-table-column label="退款" min-width="100">
<template slot-scope="scope">
<span>{{ scope.row.Refund ? scope.row.Refund : "-" }}</span>
</template>
</el-table-column>
<el-table-column label="手配费应收" min-width="100">
<template slot-scope="scope">
<span>{{
scope.row.HandFittingIncome ? scope.row.HandFittingIncome : "-"
}}</span>
</template>
</el-table-column>
<el-table-column label="手配费平台税金" min-width="100">
<template slot-scope="scope">
<span>{{
scope.row.HandFittingTax ? scope.row.HandFittingTax : "-"
}}</span>
</template>
</el-table-column>
</el-table>
<div class="row justify-sb mt mb20" v-if="item.OrderStatus!=3">
<div class="row pt20" v-if="item.GuestFileList.length > 0">
<!-- <i class="el-icon-warning cF57A98 fz15 mr"></i> -->
<div class="column">
<!-- <div class="wrap fz12 c9e">
出发前收款酒店,请您于
<span class="cff9800">{{item.PaymentDate}}</span>
前支付定金,并且于
<span class="cF1416C">{{item.FinalPaymentDate}}</span>
日前支付尾款
</div> -->
<div class="wrap fz12 c9e">
旅客名单
</div>
<div class="row fz12 see-rec mt">
<div class="text-accent q-mr-md c">
{{ item.GuestFileList[0].split("/").at(-1) }}
</div>
<div class="cursor-pointer ml mr rec cf">
<a
class="cf"
style="text-decoration:none"
:href="item.GuestFileList[0]"
>下载</a
>
</div>
<!-- <div class="cursor-pointer see c04C8C8">查看支付方式</div>
<div class="cursor-pointer ml rec cf">提交付费凭证</div> -->
</div>
<!-- <template v-if="item.CustomerPayType==1 || item.CustomerPayType==3">
<div class="fz12 mt c9e">
到店自付酒店,需要您于
<span class="cff9800">{{item.UploadGuestDate}}</span>
</div>
<div class="row fz12 see-rec mt">
<div class="cursor-pointer seeLK c059FF6">上车旅客名单</div>
</div>
</template> -->
</div>
</div>
<div class="column px15 bgf5 radius5 flex-g pa relative">
<div class="fz12">收款单据</div>
<div class="row wrap orderNo fz12 py c3FC4FF">
<span
class="cursor-pointer radius5 bgD9F3FF mr px5"
v-for="(x, i) in item.IncomeList"
@click="openDetails(x)"
>{{ x.FrID }}</span
>
<span v-if="item.IncomeList&&item.IncomeList.length == 0" class="c9e fz12">
暂无收款单据
</span>
</div>
<el-tooltip
v-if="item.OrderStatus == 2"
class="item"
effect="dark"
content="制单"
placement="top"
>
<i
class="absolute right20 bottom20 el-icon-circle-plus cursor-pointer c059FF6"
@click="makeAdocument(item, index, 1)"
></i>
</el-tooltip>
</div>
<div class="column px15 bgf5 radius5 ml flex-g pa relative">
<div class="fz12">退款单据</div>
<div class="row wrap orderNo fz12 py c3FC4FF">
<span
class="cursor-pointer radius5 bgD9F3FF mr px5"
v-for="(x, i) in item.RefundList"
@click="openDetails(x)"
>{{ x.FrID }}</span
>
<span v-if="item.RefundList&&item.RefundList.length == 0" class="c9e fz12">
暂无退款单据
</span>
</div>
<el-tooltip
v-if="item.OrderStatus == 2"
class="item"
effect="dark"
content="制单"
placement="top"
>
<i
class="absolute right20 bottom20 el-icon-circle-plus cursor-pointer c059FF6"
@click="makeAdocument(item, index, 2)"
></i>
</el-tooltip>
</div>
<div class="column px15 bgf5 radius5 ml flex-g pa relative">
<div class="fz12">成本单据</div>
<div class="row wrap orderNo fz12 py c3FC4FF">
<span
class="cursor-pointer radius5 bgD9F3FF mr px5"
v-for="(x, i) in item.CostList"
@click="openDetails(x)"
>{{ x.FrID }}</span
>
<span v-if="item.CostList&&item.CostList.length == 0" class="c9e fz12">
暂无成本单据
</span>
</div>
<el-tooltip
v-if="item.OrderStatus == 2"
class="item"
effect="dark"
content="制单"
placement="top"
>
<i
class="absolute right20 bottom20 el-icon-circle-plus cursor-pointer c059FF6"
@click="makeAdocument(item, index, 2)"
></i>
</el-tooltip>
</div>
<div class="column px15 bgf5 radius5 ml flex-g pa relative">
<div class="fz12">手配费单据</div>
<div class="row wrap orderNo fz12 py c3FC4FF">
<span
class="cursor-pointer radius5 bgD9F3FF mr px5"
v-for="(x, i) in item.HandFittingFinanceList"
@click="openDetails(x)"
>{{ x.FrID }}</span
>
<span
v-if="item.HandFittingFinanceList&&item.HandFittingFinanceList.length == 0"
class="c9e fz12"
>
暂无手配费单据
</span>
</div>
<el-tooltip
v-if="item.OrderStatus == 2"
class="item"
effect="dark"
content="制单"
placement="top"
>
<i
class="absolute right20 bottom20 el-icon-circle-plus cursor-pointer c059FF6"
@click="makeAdocument(item, index, 1, 'Hand')"
></i>
</el-tooltip>
</div>
<div class="column justify-c px15 bgf5 radius5 ml flex-g pa20">
<div class="row-c justify-sb borderD pb5">
<span class="fz12 c9e">订单总金额</span>
<div class="ml">
<span class="fz12 ml">¥</span>
<span class="fz15 fbold">{{ item.Money.toFixed(2) }}</span>
<span class="fz15">{{ item.CurrencyName }}</span>
</div>
</div>
<div
class="row-c justify-sb borderD py5"
v-if="item.CustomerPayType == 1 || item.CustomerPayType == 3"
>
<span class="fz12 c9e">到店自付</span>
<div class="ml">
<span class="fz10 ml">¥</span>
<span class="fz14">{{ item.SelfPayMoney.toFixed(2) }}</span>
<span class="fz14">{{ item.CurrencyName }}</span>
</div>
</div>
<div
class="row-c justify-sb py5"
v-if="item.CustomerPayType == 2 || item.CustomerPayType == 3"
>
<span class="fz12 c9e">出发前付款</span>
<div class="ml">
<span class="fz10 ml">¥</span>
<span class="fz14">{{ item.BeforeMoney.toFixed(2) }}</span>
<span class="fz14">{{ item.CurrencyName }}</span>
</div>
</div>
</div>
<div
v-if="item.OrderStatus > 3 || item.OrderStatus < 3"
class="column justify-c px15 bgE8F5E9 radius5 ml fz12 orderop pa20 flex-s"
>
<div
v-if="
item.OrderStatus == 1 &&
item.IncomeList&&item.IncomeList.length == 0 &&
item.RefundList&&item.RefundList.length == 0 &&
item.CostList&&item.CostList.length == 0 &&
item.HandFittingFinanceList&&item.HandFittingFinanceList.length == 0
"
class="row-c cursor-pointer radius5 cancel py5"
@click="clickRightButtom(item, 0)"
>
<i v-loading="loading0"></i>
<span class="cF1416C">取消订单</span>
</div>
<div
v-if="item.OrderStatus == 1"
class="row-c cursor-pointer radius5 confirm py5"
@click="clickRightButtom(item, 1)"
>
<i v-loading="loading1"></i>
<span class="c20C997">确认订单</span>
</div>
<div
v-if="item.OrderStatus == 2 || item.OrderStatus == 4"
class="row-c cursor-pointer radius5 change py5"
@click="goRoomDetails(item, '订房详情')"
>
<span class="c059FF6">明细/编辑</span>
</div>
<div
v-if="item.OrderStatus == 2"
class="row-c cursor-pointer radius5 change1 py5"
@click="clickRightButtom(item, 2)"
>
<i v-loading="loading2"></i>
<span class="c20C997">收损</span>
</div>
</div>
<!-- <div v-if="item.OrderStatus==2" class="column-jac px15 bgE8F5E9 radius5 ml fz12 pa20 flex-s c20C997">
<div class="mb5">已支付</div>
<div>
<span class="fbold fz14">{{item.Income}}</span>
<span>{{item.CurrencyName}}</span>
</div>
<div v-if="item.OrderStatus==2" class="orderop">
<div class="row-c cursor-pointer radius5 change mt mb" @click="goRoomDetails(item,'订房详情')">
<span class="c059FF6">明细/编辑</span>
</div>
</div>
</div> -->
</div>
<div class="mt mb20 bgf5 pa15 row-c" v-if="item.CancelRemark">
<div style="font-size:16px;font-weight:bold;font-family: pingfangR;">取消理由:</div>
<div style="margin-left:12px;font-size:12px;color: grey; font-family: microsoft yahei;">{{item.CancelRemark}}</div>
<div style="margin-left:12px;font-size:12px;font-family: microsoft yahei;">
{{item.CancelEmpName}} {{item.CancelTime}}
</div>
</div>
</div>
<el-dialog
custom-class="w400"
title="修改收损金额"
:visible.sync="outerVisible"
>
<div
class="MyCustomerDetailbottomLayer ownScrollbarStyle"
style="height:150px;"
>
<el-form label-width="80px" :model="msg" :rules="rules" ref="msg">
<el-row :gutter="20">
<el-col :span="20">
<el-form-item label="收损金额" prop="LossMoney">
<el-input-number
class="w200"
v-model="msg.LossMoney"
:min="0"
:max="10000000"
></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" style="margin-top: 20px;">
<el-col :span="24" style="text-align: right;">
<input
type="button"
class="normalBtn"
value="保存"
@click="submitForm('msg')"
/>
<input
type="button"
class="hollowFixedBtn"
value="取消"
@click="(outerVisible = false), $refs[msg].resetFields()"
/>
</el-col>
</el-row>
</el-form>
</div>
</el-dialog>
<el-dialog
custom-class="w600"
title="取消订单"
:visible.sync="cancelOrderDialog"
>
<div style="padding-bottom:20px">
<el-input
type="textarea"
autofocus
rows="5"
placeholder="请填写取消订单的缘由"
clear="w300"
v-model="cancelRemark"
></el-input>
<el-row :gutter="20" style="margin-top: 20px;">
<el-col :span="24" style="text-align: right;">
<input
type="button"
class="normalBtn"
value="取消订单"
@click="cancelOrderHandler"
/>
<input
type="button"
class="hollowFixedBtn"
value="关闭"
@click="cancelOrderDialog = false"
/>
</el-col>
</el-row>
</div>
</el-dialog>
<!-- <div class="shezhi column">
<el-input v-model="msg.LossMoney":placeholder="$t('pub.pleaseImport')"></el-input>
<div>
<button type="button" class="normalBtn" @click="saveVisa(item)">{{$t('pub.saveBtn')}}</button>
</div>
</div> -->
</div>
</template>
<script>
export default {
props: ["OrderList"],
data() {
return {
copyId: 0,
loading0: false,
loading1: false,
loading2: false,
BillMakingMsg: {
// PeroidsId: null,
// Type: null,
// EmpIds:'',
OtherType: 61,
ReFinanceId: "",
ReFinanceId2: ""
},
userInfo: {},
msg: {
OrderId: "",
LossMoney: 0
},
outerVisible: false,
rules: {
LossMoney: [
{
required: true,
message: "请输入收损金额",
trigger: "blur"
}
]
},
cancelOrderDialog: false,
cancelRemark: "",
cancelOrderId:0
};
},
methods: {
// 单据详情
openDetails(item) {
let query = {
id: item.FrID
};
this.$router.push({
path: "/FinancialDocumentsDetail",
query
});
},
// 制作单据
makeAdocument(row, index, num, name) {
this.BillMakingMsg.ReFinanceId = row.OrderId;
this.BillMakingMsg.ReFinanceId2 = num;
if (name == "Hand") {
this.BillMakingMsg.OtherType = 62;
} else {
this.BillMakingMsg.OtherType = 61;
}
let text = "";
let query = {};
if (num == 1) {
text = "收款";
} else if (num == 2) {
text = "付款";
}
query = {
blank: "y",
tab: `新增${text}单据`,
Type: num,
tradeObj: JSON.stringify(this.BillMakingMsg)
};
this.$store.commit("ChoiceAddFinancialDocuments");
this.$router.push({
path: "/ChoiceAddFinancialDocuments",
query
});
},
// 订单明细
goRoomDetails(obj, title) {
var path = "roomReservationsDetails";
if (this.userInfo.RB_Group_id == 91) {
path = "roomReservationsDetails_swt";
}
this.$router.push({
name: path,
query: {
id: obj.OrderId,
OrderType: 1,
blank: "y",
tab: title
}
});
},
clickRightButtom(item, type) {
// 0取消订单 1确认订单
if (type == 0) {
if (!this.loading0) {
this.cancelOrderDialog = true;
this.cancelOrderId = item.OrderId
}
} else if (type == 1) {
if (!this.loading1) {
this.confirmFun(item);
}
} else if (type == 2) {
if (!this.loading2) {
this.outerVisible = true;
this.msg.OrderId = item.OrderId;
this.msg.LossMoney = item.LossMoney ? item.LossMoney : 0;
}
}
},
//提交
submitForm(msg) {
//提交创建、修改表单
this.$refs[msg].validate(valid => {
if (valid) {
if (!this.loading2) {
this.saveUpdate();
}
} else {
// this.Error("请完成必填项");
return false;
}
});
},
cancelOrderHandler() {
if (this.cancelRemark == "") {
this.Error("请填写取消订单的缘由");
return;
}
if (this.loading0) return;
this.loading0 = true
this.apipost(
"dict_post_CancelAdminCustomerOrder",
{
OrderId: this.cancelOrderId,
CancelRemark: this.cancelRemark
},
res => {
if (res.data.resultCode == 1) {
this.Success(res.data.message);
this.cancelOrderDialog=false
this.cancelOrderId=0
this.cancelRemark=''
this.$emit("success");
} else {
this.Error(res.data.message);
}
this.loading0 = false;
},
err => {
this.loading0 = false;
}
);
},
saveUpdate() {
this.$confirm("是否确认设置收损?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
this.loading2 = true;
this.apipost(
"dict_post_SetCustomerOrderLoss",
this.msg,
res => {
if (res.data.resultCode == 1) {
this.Success(res.data.message);
this.$emit("success");
} else {
this.Error(res.data.message);
}
this.loading2 = false;
this.outerVisible = false;
},
err => {
(this.loading2 = false), (this.outerVisible = false);
}
);
})
.catch(() => {});
},
confirmFun(item) {
this.$confirm("是否确认订单?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
this.loading1 = true;
this.apipost(
"dict_post_ConfirmAdminCustomerOrder",
{
OrderId: item.OrderId
},
res => {
if (res.data.resultCode == 1) {
this.Success(res.data.message);
this.$emit("success");
} else {
this.Error(res.data.message);
}
this.loading1 = false;
},
err => {
this.loading1 = false;
}
);
})
.catch(() => {
this.$message.info("已取消!");
});
},
//复制信息
CopyHandler(item) {
this.copyId = item.OrderId;
setTimeout(() => {
this.copyId = 0;
}, 2000);
},
setEdate() {
return this.addMoth(new Date().Format("yyyy-MM-dd"), 1);
},
addMoth(d, m) {
let ds = d.split("-"),
_d = ds[2] - 0;
let nextM = new Date(ds[0], ds[1] - 1 + m + 1, 0);
let max = nextM.getDate();
d = new Date(ds[0], ds[1] - 1 + m, _d > max ? max : _d);
return d
.toLocaleDateString()
.match(/\d+/g)
.join("-");
},
com_onresize() {
//clientHeight的值由DIV内容的实际高度和CSS中的padding值决定,
var contentsHeight = document.body.clientHeight;
var h = contentsHeight - 50 - 180 - 40;
if (h < 110) {
return;
}
//设置table的行高
// this.tableHeight = h;
}
},
mounted() {
this.userInfo = this.getLocalStorage();
//自适应高度调节
this.com_onresize();
window.onresize = () => {
this.com_onresize();
};
}
};
</script>
<style></style>
......@@ -1011,13 +1011,14 @@
// this.$message.error('请输入LINE ID')
// return
// }
if(this.updateMsg.email){
var reg=/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
if(!reg.test(this.updateMsg.email)){
this.$message.error('请输入有效的邮箱')
return
}
}
// if(this.updateMsg.email){
// var reg=/^[A-Za-z0-9\u4e00-\u9fa5]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
// if(!reg.test(this.updateMsg.email)){
// this.$message.error('请输入有效的邮箱')
// return
// }
// }
if (this.updateMsg.District == '') {
this.updateMsg.District = 0
}
......
......@@ -963,7 +963,7 @@ export default {
name: 'HotelOrderList',
component: resolve => require(['@/components/Hotel/reservation/HotelOrderList'], resolve),
meta: {
title: '预定订单'
title: '酒店预定订单'
},
},
{
......@@ -974,6 +974,30 @@ export default {
title: '酒店检索'
},
},
{
path: '/singleProductHotelOrder', //销售酒店预定订单
name: 'singleProductHotelOrder',
component: resolve => require(['@/components/Hotel/singleProduct/HotelOrder'], resolve),
meta: {
title: '酒店预定订单'
},
},
{
path: '/singleProductHotelOrderOP', //操作酒店预定订单
name: 'singleProductHotelOrderOP',
component: resolve => require(['@/components/Hotel/singleProduct/HotelOrderOP'], resolve),
meta: {
title: '酒店预定订单'
},
},
{
path: '/singleProductModifyHotelOrder', //酒店预定订单变更
name: 'singleProductModifyHotelOrder',
component: resolve => require(['@/components/Hotel/singleProduct/ModifyHotelOrder'], resolve),
meta: {
title: '酒店预定变更'
},
},
{
path: '/RestauranOrder', //餐厅订单信息
name: 'RestauranOrder',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment