Commit 2ce443fd authored by 沈良进's avatar 沈良进

包机服务

parent e65cebfa
<template> <template>
<div> <div>
<q-card class="light-shadow q-pa-md bg-white rounded-borders q-mb-md" flat v-for="(x,index) in orders"> <q-card
<div>{{x.GTeamName}}</div> class="light-shadow q-pa-md bg-white rounded-borders q-mb-md"
<!-- <div>{{x.CreateTime}}</div> --> flat
<div>{{x.StartDate}}</div> :class="$q.platform.is.desktop ? 'row' : ''"
<div> v-for="(x, index) in orders"
<div>{{x.Remark}}</div> >
<div class="col-2">
<div class="mb-title">
<i class="iconfont icon-biaoti1"></i><span>包机信息</span>
</div>
{{ x.GTeamName }}
<div class="mb">
<span>{{ x.Title }}</span>
</div>
<div>
出发日期:<span>{{ x.StartDate }}</span>
</div>
<div>
团队信息:<span>{{ x.TCNUM }}({{ x.TCID }})</span>
</div>
</div>
<div class="col-4">
<div class="mb-title"><i class="iconfont icon-hangban1"></i><span>航班信息</span></div>
<div
class="mb"
v-for="(subItem, subIndex) in x.TravelTeamFlightList"
:key="subIndex + 1000"
>
<div>
{{ subItem.Flight_number }} {{ subItem.DepartureAirPortName }}
{{ subItem.Departure_time }} {{ subItem.ArrivalAirPortName }}
{{ subItem.Arrival_time }}
</div>
</div>
</div>
<div class="col-2">
<div>
<div class="mb-title">
<i class="iconfont icon-jiage"></i><span>团位信息</span>
</div>
<div class="mb">
<span>经济舱: {{ x.YSeat }}</span>
</div>
<div class="mb">
<span>商务舱: {{ x.CSeat }}</span>
</div>
<div class="mb">
<span>头等舱: {{ x.FSeat }}</span>
</div>
</div>
</div>
<div class="col-3">
<div class="mb-title">
<i class="iconfont icon-jiage"></i><span>价格信息</span>
</div>
<div class="mb">
<span>中心价: {{ x.B2BMemberPrice }}</span>
</div>
<div class="mb">
<span
>小孩占床: {{ x.ChildNeedPrice }}&nbsp;不占床:
{{ x.ChildNoNeedPrice }}</span
>
</div>
<div class="mb">
<span
>婴儿: {{ x.BabyPrice }}&nbsp; 婴儿附加费: {{ x.BabyChargePrice }}</span
>
</div>
<div class="mb">
<span
>老人附加费: {{ x.OldManChargePrice }} &nbsp;签证:
{{ x.VisaPrice }}</span
>
</div>
</div> </div>
<div> <div class="col-1">
<q-btn @click="ViewPayment(x)">下单</q-btn> <q-btn color="primary" unelevated @click="ViewPayment(x)">下单</q-btn>
</div> </div>
</q-card> </q-card>
<q-card class="light-shadow q-pa-md bg-white rounded-borders q-mb-md" v-if="pages.pageCount > 0" flat> <q-card
<q-pagination class="full-width justify-end" v-model="pages.pageIndex" color="primary" :max="pages.pageCount" :input="true" @update:model-value="changePageHandler" /> class="light-shadow q-pa-md bg-white rounded-borders q-mb-md"
v-if="pages.pageCount > 0"
flat
>
<q-pagination
class="full-width justify-end"
v-model="pages.pageIndex"
color="primary"
:max="pages.pageCount"
:input="true"
@update:model-value="changePageHandler"
/>
</q-card> </q-card>
<q-inner-loading :showing="loading" :label="$t('loading')" label-class="text-grey-6 f12" /> <q-inner-loading
:showing="loading"
:label="$t('loading')"
label-class="text-grey-6 f12"
/>
</div> </div>
<div class="text-center q-mt-xl" v-if="(!orders || orders.length == 0) && !loading"> <div class="text-center q-mt-xl" v-if="(!orders || orders.length == 0) && !loading">
<svg-icon :size="50" color="nav" icon="General/Clipboard.svg"></svg-icon> <svg-icon :size="50" color="nav" icon="General/Clipboard.svg"></svg-icon>
<div class="q-mt-md f12 text-grey-6">{{ $t('noneData') }}</div> <div class="q-mt-md f12 text-grey-6">{{ $t("noneData") }}</div>
</div> </div>
<q-dialog v-model="showOrderdDetail"> <q-dialog v-model="showOrderdDetail">
<!-- <OrderdDetail :OrderID="OrderID"></OrderdDetail> --> <!-- <OrderdDetail :OrderID="OrderID"></OrderdDetail> -->
...@@ -27,44 +112,43 @@ ...@@ -27,44 +112,43 @@
<q-dialog v-model="showAddOrder"> <q-dialog v-model="showAddOrder">
<AddOrder :info="info" @close="showAddOrder = false"></AddOrder> <AddOrder :info="info" @close="showAddOrder = false"></AddOrder>
</q-dialog> </q-dialog>
</template> </template>
<script lang="ts"> <script lang="ts">
import { DirtionmaryHelper } from '../../../config/dictionary' import { DirtionmaryHelper } from "../../../config/dictionary";
import { defineComponent, inject, reactive, toRefs, watch, toRaw } from 'vue' import { defineComponent, inject, reactive, toRefs, watch, toRaw } from "vue";
import travelService from '../../../api/travel' import travelService from "../../../api/travel";
import { ApiResult } from '../../../@types/enumHelper' import { ApiResult } from "../../../@types/enumHelper";
import message from '../../../utils/message' import message from "../../../utils/message";
import { RoomType, StandardStatus } from '../../../@types' import { RoomType, StandardStatus } from "../../../@types";
import { getHotelOrderStatus, getHotelRoomType, moneyFormat } from '../../../utils/tools' import { getHotelOrderStatus, getHotelRoomType, moneyFormat } from "../../../utils/tools";
import { useI18n } from 'vue-i18n' import { useI18n } from "vue-i18n";
import svgIcon from '../../../global/svg-icon.vue' import svgIcon from "../../../global/svg-icon.vue";
import { copyToClipboard, useQuasar } from 'quasar' import { copyToClipboard, useQuasar } from "quasar";
import { currentRouter } from '../../../router' import { currentRouter } from "../../../router";
// import OrderdDetail from './OrderdDetail.vue' // import OrderdDetail from './OrderdDetail.vue'
// import BankAccount from '../../BankAccount.vue' // import BankAccount from '../../BankAccount.vue'
import AddOrder from './addOrder.vue' import AddOrder from "./addOrder.vue";
export default defineComponent({ export default defineComponent({
components: {AddOrder }, components: { AddOrder },
setup(props) { setup(props) {
const search = inject(DirtionmaryHelper.TRAVEL_ORDER_OBJ) as any const search = inject(DirtionmaryHelper.TRAVEL_ORDER_OBJ) as any;
const { t } = useI18n() const { t } = useI18n();
const $q = useQuasar() const $q = useQuasar();
watch(search, (n, o) => { watch(search, (n, o) => {
if (data.loading) return if (data.loading) return;
data.pages.pageIndex = 1 data.pages.pageIndex = 1;
data.orders = [] data.orders = [];
methods.initOrders() methods.initOrders();
}) });
const data = reactive({ const data = reactive({
info: {}, info: {},
copyId: 0, copyId: 0,
showAddOrder: false, showAddOrder: false,
OrderID: '', OrderID: "",
showOrderdDetail: false, showOrderdDetail: false,
orders: [] as Array<any>, orders: [] as Array<any>,
status: [] as Array<StandardStatus>, status: [] as Array<StandardStatus>,
...@@ -72,124 +156,120 @@ export default defineComponent({ ...@@ -72,124 +156,120 @@ export default defineComponent({
pages: { pages: {
pageIndex: 1, pageIndex: 1,
pageSize: 10, pageSize: 10,
pageCount: 0 pageCount: 0,
}, },
loadingCel: false, loadingCel: false,
loading: false, loading: false,
cols: [ });
{ name: 'HotelName', label: t('v101.scatteredOrderList.table1'), field: (row: any) => row.HotelName, align: 'left' },
{ name: 'Number', label: t('v101.scatteredOrderList.table3'), field: (row: any) => row.Number, align: 'left' },
{ name: 'DiscountMoney', label: t('v101.scatteredOrderList.youhui'), field: (row: any) => `${row.DiscountMoney.toFixed(2)}`, align: 'left' },
{ name: 'CustomerPayMoney', label: t('v101.scatteredOrderList.table5'), field: (row: any) => row.CustomerPayMoney.toFixed(2), align: 'left' },
{ name: 'Money', label: t('hotelorder.col.m'), field: (row: any) => row.Money.toFixed(2), align: 'left' },
] as any,
mobileCols: [
{ name: 'HotelName', label: t('v101.scatteredOrderList.table1'), align: 'left' },
{ name: 'OrderID', label: t('v101.scatteredOrderList.table2'), field: (row: any) => row.OrderID, align: 'left' },
{ name: 'CustomerPayMoney', label: t('v101.scatteredOrderList.table5'), field: (row: any) => row.CustomerPayMoney.toFixed(2), align: 'left' },
]
})
const methods = { const methods = {
ViewPayment(info:any) { changePageHandler(n: any) {
data.info = toRaw(info) console.log(n);
console.log('ViewPayment', toRaw(info)) data.pages.pageIndex = n;
data.showAddOrder = true methods.initOrders();
},
ViewPayment(info: any) {
data.info = toRaw(info);
console.log("ViewPayment", toRaw(info));
data.showAddOrder = true;
}, },
canCelHotel(ThirdOrderNo) { canCelHotel(ThirdOrderNo) {
$q.dialog({ $q.dialog({
title: t('dialog.titles.horder'), title: t("dialog.titles.horder"),
message: t('dialog.contents.horder'), message: t("dialog.contents.horder"),
cancel: true, cancel: true,
persistent: true persistent: true,
}).onOk(() => { }).onOk(() => {
methods.cancellations(ThirdOrderNo) methods.cancellations(ThirdOrderNo);
}) });
}, },
cancellations(ThirdOrderNo){ cancellations(ThirdOrderNo) {
if(data.loadingCel) return if (data.loadingCel) return;
let msg ={ let msg = {
bookingNumber:ThirdOrderNo, bookingNumber: ThirdOrderNo,
CancelBy: search.CustomerId, CancelBy: search.CustomerId,
CancelType:2 CancelType: 2,
} };
let param = Object.assign(msg) let param = Object.assign(msg);
data.loadingCel = true data.loadingCel = true;
travelService.getTravelList(param) travelService
.then(r => { .getTravelList(param)
.then((r) => {
if (r.data.resultCode == ApiResult.SUCCESS) { if (r.data.resultCode == ApiResult.SUCCESS) {
message.successMsg(`${t('success')}`) message.successMsg(`${t("success")}`);
methods.initOrders() methods.initOrders();
} else { } else {
message.errorMsg(r.data.message) message.errorMsg(r.data.message);
} }
data.loadingCel = false data.loadingCel = false;
})
.catch(e => {
message.errorMsg(e.message)
data.loadingCel = false
}) })
.catch((e) => {
message.errorMsg(e.message);
data.loadingCel = false;
});
}, },
getDetail(OrderID){ getDetail(OrderID) {
data.showOrderdDetail = true data.showOrderdDetail = true;
data.OrderID = OrderID data.OrderID = OrderID;
}, },
initOrders() { initOrders() {
data.loading = true data.loading = true;
let param = Object.assign(data.pages, search) let param = Object.assign(data.pages, search);
travelService.getTravelList(param) travelService
.then(r => { .getTravelList(param)
data.loading = false .then((r) => {
if (r.data.resultCode == ApiResult.SUCCESS) { data.loading = false;
// r.data.data.pageData.forEach((x: any) => { if (r.data.resultCode == ApiResult.SUCCESS) {
// x.typeInfo = data.status.find(y => y.StatusId == x.OrderStatus) ?? data.status[1] // r.data.data.pageData.forEach((x: any) => {
// x.SendType = data.sends.find(y => y.Id == x.MailingState) ?? data.sends[0] // x.typeInfo = data.status.find(y => y.StatusId == x.OrderStatus) ?? data.status[1]
// x.Money = 0 // x.SendType = data.sends.find(y => y.Id == x.MailingState) ?? data.sends[0]
// let Money = 0 // x.Money = 0
// x.DetailList.forEach((y:any)=>{ // let Money = 0
// Money+=y.Money // x.DetailList.forEach((y:any)=>{
// }) // Money+=y.Money
// x.Money= Number(Money+x.MailingMoney) // })
// }) // x.Money= Number(Money+x.MailingMoney)
data.orders = r.data.data.pageData // })
data.pages.pageCount = r.data.data.pageCount data.orders = r.data.data.pageData;
} else { data.pages.pageCount = r.data.data.pageCount;
message.errorMsg(r.data.message) } else {
} message.errorMsg(r.data.message);
}).catch(e => { }
message.errorMsg(e.message) })
data.loading = false .catch((e) => {
}) message.errorMsg(e.message);
data.loading = false;
});
}, },
init() { init() {
data.status = getHotelOrderStatus() data.status = getHotelOrderStatus();
data.rooms = getHotelRoomType() data.rooms = getHotelRoomType();
methods.initOrders() methods.initOrders();
}, },
setCopyHandler(order: any, ctx?: string) { setCopyHandler(order: any, ctx?: string) {
if (ctx) { if (ctx) {
data.copyId = -1 data.copyId = -1;
copyToClipboard(ctx) copyToClipboard(ctx);
} else { } else {
data.copyId = order.OrderID data.copyId = order.OrderID;
copyToClipboard(order.ThirdOrderNo) copyToClipboard(order.ThirdOrderNo);
} }
setTimeout(() => { setTimeout(() => {
data.copyId = 0 data.copyId = 0;
}, 2000) }, 2000);
} },
} };
methods.init() methods.init();
return { return {
...toRefs(data), ...toRefs(data),
...methods, ...methods,
moneyFormat moneyFormat,
} };
} },
}) });
</script> </script>
<style> <style>
...@@ -214,24 +294,33 @@ export default defineComponent({ ...@@ -214,24 +294,33 @@ export default defineComponent({
height: 28px; height: 28px;
line-height: 28px; line-height: 28px;
} }
.orderListDialog-title{ .orderListDialog-title {
position: relative; position: relative;
} }
.orderListDialog-title span{ .orderListDialog-title span {
font-size: 20px; font-size: 20px;
} }
.orderListDialog-close{ .orderListDialog-close {
position: absolute; position: absolute;
right: 0; right: 0;
top: -10px; top: -10px;
font-size: 26px; font-size: 26px;
} }
.orderListDialog-bg{ .orderListDialog-bg {
background: #5098FF; background: #5098ff;
border-radius: 10px; border-radius: 10px;
} }
.orderListDialog-img{ .orderListDialog-img {
background: url('../../../assets/images/wallet.png')no-repeat right #5098FF; background: url("../../../assets/images/wallet.png") no-repeat right #5098ff;
background-size: 97px 100%; background-size: 97px 100%;
} }
</style> </style>
<style scoped>
.mb-title {
font-weight: bold;
margin-bottom: 10px;
}
.mb {
margin-bottom: 10px;
}
</style>
\ No newline at end of file
<template> <template>
<div class="rounded-borders bg-white row items-center q-pa-md"> <div class="rounded-borders bg-white row items-center q-pa-md">
<q-select v-if="$q.platform.is.desktop" class="q-mr-md" style="min-width: 150px" v-model="search.B2BSelectOrderState" @update:model-value="setOrderStatus" dense :options="status" emit-value option-label="StatusName" option-value="StatusId" map-options :label="$t('hotelorder.search.status')" standout /> <q-field :class="$q.platform.is.desktop ? '' : 'q-mb-md'" stack-label :label="$t('daterange')" standout class="q-ml-lg col-2" style="min-width: 190px" dense>
<q-input class="q-mr-md" v-model="search.HotelName" dense standout :label="$t('v101.scatteredOrderList.first')"/> <div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div>
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy">
<q-date v-model="dateRange" :options="optionsFn" range mask="YYYY/MM/DD" landscape
@range-end="dateRangeHandler"></q-date>
</q-popup-proxy>
</q-field>
<q-input class="q-mr-md q-ml-md" v-model="search.TCID" dense standout label="团号"/>
<div class="col"></div> <div class="col"></div>
<q-btn color="primary" unelevated :label="$t('query')" @click="setQueryHandler"/> <q-btn color="primary" unelevated :label="$t('query')" @click="setQueryHandler"/>
</div> </div>
<div class="rounded-borders bg-white q-pa-sm q-mt-md mobile-only">
<q-tabs v-model="search.B2BSelectOrderState" class="text-cyan" dense>
<q-tab :name="x.StatusId" :label="x.StatusName" v-for="x in status" @click="setOrderStatus(x.StatusId)"/>
</q-tabs>
</div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { DirtionmaryHelper } from '../../../config/dictionary' import { DirtionmaryHelper } from '../../../config/dictionary'
import { computed, defineComponent, inject, reactive, ref, toRefs } from 'vue' import { defineComponent, inject, reactive, ref } from 'vue'
import { OrderType, RoomType, StandardStatus } from '../../../@types' import { date } from 'quasar'
import { getScatteredHotelOrderStatus, getHotelOrderType, getHotelRoomType } from '../../../utils/tools'
import { date,useQuasar } from 'quasar'
export default defineComponent({ export default defineComponent({
setup(props) { setup(props) {
const qDateProxy = ref(null) as any const qDateProxy = ref(null) as any
const $q = useQuasar()
const data = reactive({
status: [] as Array<StandardStatus>,
cancelStatus: {} as StandardStatus | undefined,
dateRangeFormat: '',
dateRange: {} as any,
rooms: [] as Array<RoomType>,
orderTypes: [] as Array<OrderType>,
canHide: false
})
const realSearch = inject(DirtionmaryHelper.TRAVEL_ORDER_OBJ) as any const realSearch = inject(DirtionmaryHelper.TRAVEL_ORDER_OBJ) as any
const search = reactive(JSON.parse(JSON.stringify(realSearch))) const search = reactive(JSON.parse(JSON.stringify(realSearch)))
const dateRange = reactive({from: '', to: ''})
dateRange.to = date.formatDate(date.addToDate(new Date(), { days: 50 }), 'YYYY/MM/DD')
dateRange.from = date.formatDate(date.addToDate(new Date(), { days: 20 }), 'YYYY/MM/DD')
const dateRangeFormat = ref(`${dateRange.from} - ${dateRange.to}`)
search.StartTime = dateRange.from
search.EndTime = dateRange.to
const methods = { const methods = {
initStatus() { setQueryHandler(){
let allStatus = getScatteredHotelOrderStatus() realSearch.StartTime=search.StartTime
data.status = allStatus.filter((x: StandardStatus) => { realSearch.EndTime=search.EndTime
return x.StatusId != 4 realSearch.TCID=search.TCID
})
data.cancelStatus = allStatus.find((x: StandardStatus) => {
return x.StatusId == 4
})
data.rooms = getHotelRoomType(true)
data.orderTypes = getHotelOrderType(true)
},
optionsFn(cd: any) {
return cd < date.formatDate(date.addToDate(new Date(), { days: 1 }), 'YYYY/MM/DD')
}, },
dateRangeHandler(e: any) { dateRangeHandler(e: any) {
search.StartTime = `${e.from.year}/${e.from.month}/${e.from.day}` search.StartTime = `${e.from.year}/${e.from.month}/${e.from.day}`
search.EndTime = `${e.to.year}/${e.to.month}/${e.to.day} ` search.EndTime = `${e.to.year}/${e.to.month}/${e.to.day} `
data.dateRangeFormat = `${search.StartTime} - ${search.EndTime} ` dateRangeFormat.value = `${search.StartTime} - ${search.EndTime} `
if (qDateProxy.value) qDateProxy.value.hide() if (qDateProxy.value) qDateProxy.value.hide()
}, },
setQueryHandler(){ optionsFn(cd: any) {
realSearch.B2BSelectOrderState=search.B2BSelectOrderState return cd >= date.formatDate(date.addToDate(new Date(), { days: 20 }), 'YYYY/MM/DD')
realSearch.CustomerId=search.CustomerId
realSearch.HotelName=search.HotelName
}, },
setOrderStatus(statusId:number){
realSearch.B2BSelectOrderState=statusId
}
} }
const searchCnt = computed(() => {
let setCnt = 0
if ($q.platform.is.mobile) {
if (realSearch.HotelName) setCnt++
}
return setCnt
})
methods.initStatus()
return { return {
...toRefs(data),
...methods, ...methods,
search, search,
searchCnt dateRange,
dateRangeFormat
} }
} }
}) })
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
<q-card flat class="q-pa-md" style="background: #fff; width: 600px; min-width: 375px"> <q-card flat class="q-pa-md" style="background: #fff; width: 600px; min-width: 375px">
<div class="bacakground"> <div class="bacakground">
<div class="heading">新增/修改订单</div> <div class="heading">新增/修改订单</div>
<q-form> <q-form @submit="saveOrder">
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<div class="title">成人数量</div> <div class="title">成人数量</div>
...@@ -59,6 +59,63 @@ ...@@ -59,6 +59,63 @@
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="col">
<div class="title">儿童占床</div>
<q-input
v-model="addMsg.ChirdNeedBedNum"
class="col q-mr-md"
mask="#"
reverse-fill-mask
dense
type="text"
standout
@keyup.native="checkInteger(addMsg, 'ChirdNeedBedNum')" @update:model-value="
getNumber();
getHouseNo();
getTotalPrice();
autoRemarks('ChirdNeedBedNum', '儿童占床');
"></q-input
>
</div>
<div class="col">
<div class="title">儿童不占床</div>
<q-input
v-model="addMsg.ChirdNoNeedBedNum"
class="col q-mr-md"
mask="#"
reverse-fill-mask
dense
type="text"
standout
@keyup.native="checkInteger(addMsg, 'ChirdNoNeedBedNum')"
@update:model-value="
getNumber();
getHouseNo();
getTotalPrice();
autoRemarks('ChirdNoNeedBedNum', '儿童不占床');
"
></q-input>
</div>
</div>
<div class="row">
<div class="col">
<div class="title">婴儿人数</div>
<q-input
v-model="addMsg.BabyNum"
class="col q-mr-md"
mask="#"
reverse-fill-mask
dense
type="text"
standout
@keyup.native="checkInteger(addMsg, 'BabyNum')" @update:model-value="
getNumber();
getTotalPrice();
autoRemarks('BabyNum', '婴儿人数');
"
></q-input
>
</div>
<div class="col"> <div class="col">
<div class="title">单房数量</div> <div class="title">单房数量</div>
<q-input <q-input
...@@ -78,19 +135,96 @@ ...@@ -78,19 +135,96 @@
" "
></q-input> ></q-input>
</div> </div>
<!-- <div> </div>
<div>分摊人</div> <div class="row">
<q-input <div class="col">
v-model="addMsg.CommissionSharePeople" <div class="title">大床房</div>
class="col q-mr-md" <q-input
mask="#" v-model="addMsg.BigRoomNum"
reverse-fill-mask class="col q-mr-md"
dense mask="#"
type="text" reverse-fill-mask
standout dense
type="text"
></q-input> standout
</div> --> @keyup.native="checkInteger(addMsg, 'BigRoomNum')" @update:model-value="
yzBigBed();
getTotalPrice();
autoRemarks('BigRoomNum', '大床房');
"></q-input
>
</div>
<div class="col">
<div class="title">三人房</div>
<q-input
v-model="addMsg.TripleRoomNum"
class="col q-mr-md"
mask="#"
reverse-fill-mask
dense
type="text"
standout
@keyup.native="checkInteger(addMsg, 'TripleRoomNum')" @update:model-value="
yzBigBed1();
getTotalPrice();
autoRemarks('TripleRoomNum', '三人房');
"></q-input>
</div>
</div>
<div class="row">
<div class="col">
<div class="title">签证数量</div>
<q-input
v-model="addMsg.VisaNum"
class="col q-mr-md"
mask="#"
reverse-fill-mask
dense
type="text"
standout
@keyup.native="checkInteger(addMsg, 'VisaNum')" @update:model-value="
yzVisaNum();
getTotalPrice();
autoRemarks2('VisaNum', '不要签证数量');
autoRemarks('VisaNum', '不要签证数量');
"></q-input
>
</div>
<div class="col">
<div class="title">保险数量</div>
<q-input
v-model="addMsg.SafeNum"
class="col q-mr-md"
mask="#"
reverse-fill-mask
dense
type="text"
standout
@keyup.native="checkInteger(addMsg, 'SafeNum')" @update:model-value="
yzSafeNum();
getTotalPrice();
autoRemarks2('SafeNum', '不要保险数量');
"></q-input>
</div>
</div>
<div class="row">
<div class="col">
<div class="title">单身男女</div>
<q-radio v-model="addMsg.OneSex" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" val="1" label="男" @update:model-value="changePeople"/>
<q-radio v-model="addMsg.OneSex" checked-icon="task_alt" unchecked-icon="panorama_fish_eye" val="2" label="女" @update:model-value="changePeople"/>
</div>
<div class="col">
<div class="title">预计用房</div>
<q-input
class="col q-mr-md"
reverse-fill-mask
dense
type="text"
standout
v-model="addMsg.PredictRoomNum" :disabled="true"></q-input>
</div>
</div>
<div class="row">
<div class="col"> <div class="col">
<div class="title">经济舱</div> <div class="title">经济舱</div>
<q-input <q-input
...@@ -146,7 +280,7 @@ ...@@ -146,7 +280,7 @@
dense dense
type="text" type="text"
standout standout
:rules="[ val => val && val.length > 0 || ' ']"
></q-input> ></q-input>
</div> </div>
<div class="col"> <div class="col">
...@@ -159,7 +293,7 @@ ...@@ -159,7 +293,7 @@
dense dense
type="text" type="text"
standout standout
:rules="[ val => val && val.length > 0 || ' ']"
></q-input> ></q-input>
</div> </div>
</div> </div>
...@@ -181,7 +315,7 @@ ...@@ -181,7 +315,7 @@
</div> </div>
<div class="row justify-end"> <div class="row justify-end">
<q-btn unelevated class="bg-grey-3 hover q-mr-md" @click="cancel">取消</q-btn> <q-btn unelevated class="bg-grey-3 hover q-mr-md" @click="cancel">取消</q-btn>
<q-btn color="primary" unelevated class="q-ml-md" @click="saveOrder">确认</q-btn></div> <q-btn :loading="loading" color="primary" unelevated class="q-ml-md" type="submit">确认</q-btn></div>
</q-form> </q-form>
</div> </div>
</q-card> </q-card>
...@@ -280,6 +414,9 @@ export default defineComponent({ ...@@ -280,6 +414,9 @@ export default defineComponent({
addMsg.TC_Price = data.addObj.B2BPrice; addMsg.TC_Price = data.addObj.B2BPrice;
addMsg.Unit_Price = data.addObj.B2BPrice; addMsg.Unit_Price = data.addObj.B2BPrice;
const methods = { const methods = {
changePeople(value) {
addMsg.OneSex = value
},
cancel() {context.emit('close')}, cancel() {context.emit('close')},
//验证只能输入整数【负数:isMinus传true】 //验证只能输入整数【负数:isMinus传true】
checkInteger(item, filed, isMinus) { checkInteger(item, filed, isMinus) {
...@@ -292,9 +429,19 @@ export default defineComponent({ ...@@ -292,9 +429,19 @@ export default defineComponent({
} }
item[filed] = value; item[filed] = value;
}, },
getHouseNo() { getHouseNo() {let etbzc = 0;
console.log("getHouseNo", (Number(addMsg.AirticketNum) +
(Number(addMsg.ManNum) +
Number(addMsg.ChirdNeedBedNum) -
etbzc +
Number(addMsg.OldPeopleNum)) -
Number(addMsg.TripleRoomNum) * 3 -
Number(addMsg.SingleRoomNum)) /
2,
Number(addMsg.SingleRoomNum),
Number(addMsg.TripleRoomNum));
//算法:((成人+儿童占床数+老人-(三人房数量*3))-单房数)/2+单房数+三人房数量 8.7新增单地接儿童不占床 减去 儿童不占床 //算法:((成人+儿童占床数+老人-(三人房数量*3))-单房数)/2+单房数+三人房数量 8.7新增单地接儿童不占床 减去 儿童不占床
let etbzc = 0;
addMsg.PredictRoomNum = addMsg.PredictRoomNum =
(Number(addMsg.AirticketNum) + (Number(addMsg.AirticketNum) +
(Number(addMsg.ManNum) + (Number(addMsg.ManNum) +
...@@ -309,6 +456,7 @@ export default defineComponent({ ...@@ -309,6 +456,7 @@ export default defineComponent({
console.log("getHouseNo", addMsg.PredictRoomNum); console.log("getHouseNo", addMsg.PredictRoomNum);
}, },
getNumber() { getNumber() {
console.log('getNumber>>>>>>>>>>>>')
let ChirdNum = addMsg.ChirdNoNeedBedNum * 1 + addMsg.ChirdNeedBedNum * 1; let ChirdNum = addMsg.ChirdNoNeedBedNum * 1 + addMsg.ChirdNeedBedNum * 1;
addMsg.ChirdNum = addMsg.ChirdNoNeedBedNum * 1 + addMsg.ChirdNeedBedNum * 1; addMsg.ChirdNum = addMsg.ChirdNoNeedBedNum * 1 + addMsg.ChirdNeedBedNum * 1;
addMsg.VisaNum = addMsg.VisaNum =
...@@ -355,8 +503,8 @@ export default defineComponent({ ...@@ -355,8 +503,8 @@ export default defineComponent({
autoRemarks(key, text) {}, autoRemarks(key, text) {},
// 计算价格 // 计算价格
getTotalPrice() { getTotalPrice() {
console.log("PreferPrice", addMsg.PreferPrice); addMsg.ChirdNum =
addMsg.ChirdNum = addMsg.ChirdNoNeedBedNum * 1 + addMsg.ChirdNeedBedNum * 1; addMsg.ChirdNoNeedBedNum * 1 + addMsg.ChirdNeedBedNum * 1;
if (data.addObj.IsBirdDiscount == 1) { if (data.addObj.IsBirdDiscount == 1) {
//早鸟优惠 //早鸟优惠
//addMsg.Unit_Price //成交单价 //addMsg.Unit_Price //成交单价
...@@ -381,29 +529,36 @@ export default defineComponent({ ...@@ -381,29 +529,36 @@ export default defineComponent({
data.addObj.OldManChargePrice); data.addObj.OldManChargePrice);
let zafeiqianzhen = let zafeiqianzhen =
data.addObj.OtherPrice * data.addObj.OtherPrice *
(Number(addMsg.ManNum) + (Number(addMsg.ManNum) +
Number(addMsg.ChirdNum) + Number(addMsg.ChirdNum) +
Number(addMsg.OldPeopleNum)) + Number(addMsg.OldPeopleNum)) +
data.addObj.VisaPrice * data.addObj.VisaPrice *
(Number(addMsg.AirticketNum) + (Number(addMsg.AirticketNum) +
Number(addMsg.ManNum) + Number(addMsg.ManNum) +
Number(addMsg.ChirdNum) + Number(addMsg.ChirdNum) +
Number(addMsg.OldPeopleNum)) - Number(addMsg.OldPeopleNum)) -
(data.addObj.BackVisaPrice || 0) * (data.addObj.BackVisaPrice || 0) *
(Number(addMsg.AirticketNum) + (Number(addMsg.AirticketNum) +
Number(addMsg.ManNum) + Number(addMsg.ManNum) +
Number(addMsg.ChirdNum) + Number(addMsg.ChirdNum) +
Number(addMsg.BabyNum) + Number(addMsg.BabyNum) +
Number(addMsg.OldPeopleNum) - Number(addMsg.OldPeopleNum) -
Number(addMsg.VisaNum)); Number(addMsg.VisaNum));
let danfang = Number(addMsg.SingleRoomNum) * data.addObj.SingleRoomPrice; let danfang =
Number(addMsg.SingleRoomNum) * data.addObj.SingleRoomPrice;
let ertongbed = let ertongbed =
data.addObj.ChildNeedPrice * Number(addMsg.ChirdNeedBedNum) - data.addObj.ChildNeedPrice * Number(addMsg.ChirdNeedBedNum) -
data.addObj.ChildNoNeedPrice * data.addObj.ChildNoNeedPrice *
(Number(addMsg.ChirdNum) - Number(addMsg.ChirdNeedBedNum)); (Number(addMsg.ChirdNum) -
let lianyun = 0; Number(addMsg.ChirdNeedBedNum));
let lianyun = 0
// (Number(addMsg.ManNum) +
// Number(addMsg.ChirdNum) +
// Number(addMsg.OldPeopleNum)) *
// (Number(this.stratPrice) + Number(this.returnPrice));
let dandijie; let dandijie;
dandijie = (data.addObj.SingleDMCPrice || 0) * Number(addMsg.AirticketNum); dandijie =
(data.addObj.SingleDMCPrice || 0) * Number(addMsg.AirticketNum);
addMsg.PreferPrice = addMsg.PreferPrice =
dandijie + dandijie +
lianyun + lianyun +
...@@ -413,9 +568,10 @@ export default defineComponent({ ...@@ -413,9 +568,10 @@ export default defineComponent({
laoren + laoren +
zafeiqianzhen + zafeiqianzhen +
danfang + danfang +
ertongbed; ertongbed
} else { } else {
let chengren = Number(addMsg.ManNum) * Number(addMsg.Unit_Price); let chengren =
Number(addMsg.ManNum) * Number(addMsg.Unit_Price);
let ertong = let ertong =
Number(addMsg.ChirdNum) * Number(addMsg.ChirdNum) *
(Number(addMsg.Unit_Price) + data.addObj.BabyChargePrice); (Number(addMsg.Unit_Price) + data.addObj.BabyChargePrice);
...@@ -425,30 +581,48 @@ export default defineComponent({ ...@@ -425,30 +581,48 @@ export default defineComponent({
(Number(addMsg.Unit_Price) + data.addObj.OldManChargePrice); (Number(addMsg.Unit_Price) + data.addObj.OldManChargePrice);
let zafeiqianzhen = let zafeiqianzhen =
data.addObj.OtherPrice * data.addObj.OtherPrice *
(Number(addMsg.ManNum) + (Number(addMsg.ManNum) +
Number(addMsg.ChirdNum) + Number(addMsg.ChirdNum) +
Number(addMsg.OldPeopleNum)) + Number(addMsg.OldPeopleNum)) +
data.addObj.VisaPrice * data.addObj.VisaPrice *
(Number(addMsg.AirticketNum) + (Number(addMsg.AirticketNum) +
Number(addMsg.ManNum) + Number(addMsg.ManNum) +
Number(addMsg.ChirdNum) + Number(addMsg.ChirdNum) +
Number(addMsg.OldPeopleNum)) - Number(addMsg.OldPeopleNum)) -
(data.addObj.BackVisaPrice || 0) * (data.addObj.BackVisaPrice || 0) *
(Number(addMsg.AirticketNum) + (Number(addMsg.AirticketNum) +
Number(addMsg.ManNum) + Number(addMsg.ManNum) +
Number(addMsg.ChirdNum) + Number(addMsg.ChirdNum) +
Number(addMsg.BabyNum) + Number(addMsg.BabyNum) +
Number(addMsg.OldPeopleNum) - Number(addMsg.OldPeopleNum) -
Number(addMsg.VisaNum)); Number(addMsg.VisaNum));
let danfang = Number(addMsg.SingleRoomNum) * data.addObj.SingleRoomPrice; let danfang =
Number(addMsg.SingleRoomNum) * data.addObj.SingleRoomPrice;
let ertongbed = let ertongbed =
data.addObj.ChildNeedPrice * Number(addMsg.ChirdNeedBedNum) - data.addObj.ChildNeedPrice * Number(addMsg.ChirdNeedBedNum) -
data.addObj.ChildNoNeedPrice * data.addObj.ChildNoNeedPrice *
(Number(addMsg.ChirdNum) - Number(addMsg.ChirdNeedBedNum)); (Number(addMsg.ChirdNum) -
let lianyun = 0; Number(addMsg.ChirdNeedBedNum));
let lianyun = 0
// (Number(addMsg.ManNum) +
// Number(addMsg.ChirdNum) +
// Number(addMsg.OldPeopleNum)) *
// (Number(this.stratPrice) + Number(this.returnPrice));
let dandijie; let dandijie;
dandijie = (data.addObj.SingleDMCPrice || 0) * Number(addMsg.AirticketNum); dandijie =
(data.addObj.SingleDMCPrice || 0) * Number(addMsg.AirticketNum);
console.log('data.addObj.OtherPrice', data.addObj.OtherPrice, (Number(addMsg.ManNum) +
Number(addMsg.ChirdNum) +
Number(addMsg.OldPeopleNum)),data.addObj.VisaPrice,(Number(addMsg.AirticketNum) +
Number(addMsg.ManNum) +
Number(addMsg.ChirdNum) +
Number(addMsg.OldPeopleNum)),(Number(addMsg.AirticketNum) +
Number(addMsg.ManNum) +
Number(addMsg.ChirdNum) +
Number(addMsg.BabyNum) +
Number(addMsg.OldPeopleNum) -
Number(addMsg.VisaNum)))
addMsg.PreferPrice = addMsg.PreferPrice =
dandijie + dandijie +
lianyun + lianyun +
...@@ -458,12 +632,11 @@ export default defineComponent({ ...@@ -458,12 +632,11 @@ export default defineComponent({
laoren + laoren +
zafeiqianzhen + zafeiqianzhen +
danfang + danfang +
ertongbed; ertongbed
} }
console.log("PreferPrice", addMsg.PreferPrice); // TODO
// TODO 需要注释回来的函数
// methods.getTicheng(); // methods.getTicheng();
// methods.getTypePrice(); // methods.getTypePrice();
}, },
getTicheng() { getTicheng() {
//提成 //提成
...@@ -624,25 +797,18 @@ export default defineComponent({ ...@@ -624,25 +797,18 @@ export default defineComponent({
}, },
saveOrder() { saveOrder() {
console.log("EmployeeId", data.userInfo); console.log("EmployeeId", data.userInfo);
addMsg.CustomerId = data.userInfo.accountId; addMsg.CustomerId = data.userInfo.customerId;
addMsg.GuestNum = Number(addMsg.ManNum) + Number(addMsg.OldPeopleNum); addMsg.CreateBy = data.userInfo.salesBaseInfo.employeeId
addMsg.GuestNum = Number(addMsg.ManNum) + Number(addMsg.OldPeopleNum) + Number(addMsg.ChirdNeedBedNum) + Number(addMsg.ChirdNoNeedBedNum)+ Number(addMsg.BabyNum);
data.loading = true;
travelService travelService
.newOrder(addMsg) .newOrder(addMsg)
.then((r) => { .then((r) => {
data.loading = false; data.loading = false;
if (r.data.resultCode == ApiResult.SUCCESS) { if (r.data.resultCode == ApiResult.SUCCESS) {
// r.data.data.pageData.forEach((x: any) => { message.successMsg('操作成功');
// x.typeInfo = data.status.find(y => y.StatusId == x.OrderStatus) ?? data.status[1] context.emit('close')
// x.SendType = data.sends.find(y => y.Id == x.MailingState) ?? data.sends[0]
// x.Money = 0
// let Money = 0
// x.DetailList.forEach((y:any)=>{
// Money+=y.Money
// })
// x.Money= Number(Money+x.MailingMoney)
// })
data.orders = r.data.data.pageData;
data.pages.pageCount = r.data.data.pageCount;
} else { } else {
message.errorMsg(r.data.message); message.errorMsg(r.data.message);
} }
......
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