Commit 968812b3 authored by youjie's avatar youjie

no message

parents 055f5fde 2ce443fd
......@@ -8,7 +8,7 @@
"editor.fontSize": 15,
"editor.wordWrap": "wordWrapColumn",
"editor.accessibilitySupport": "auto",
"editor.renderFinalNewline": false,
"editor.renderFinalNewline": "off",
"workbench.editor.wrapTabs": true,
"editor.unicodeHighlight.nonBasicASCII": true
}
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -64,7 +64,7 @@ module.exports = configure(function (ctx) {
publicPath: ctx.dev ? '/' : './',
env: ctx.dev
? {
BASE_APP_API: 'http://192.168.10.9:8083/api/common/post',//http://192.168.10.9:8083/api/common/post http://192.168.10.206:8015/api/common/post
BASE_APP_API: 'http://192.168.10.226:8015/api/common/post',//http://192.168.10.226:8015/api/common/post http://192.168.10.206:8015/api/common/post
JAVA_URL_API: 'http://efficient.oytour.com',
VERSION:require('./package.json').version,
......
import { HttpResponse } from '../@types'
import request from './request'
class travelService {
static async getTravelList(params:any):Promise<HttpResponse>{
return request('travelteam_GetTravelTeamPartnerPage',params)
}
static async addOrder(params:any):Promise<HttpResponse>{
return request('travelteam_GetTravelTeamPartnerPage',params)
}
static async newOrder(params:any):Promise<HttpResponse>{
return request('sellorder_post_SetTravelTeamOrderForB2B',params)
}
}
export default travelService
......@@ -93,5 +93,9 @@ class DirtionmaryHelper {
* 元素滚动參數
*/
static readonly SCROLL_AREA_OBJ = "scrollareaobj"
/**
* 包机订单列表
*/
static readonly TRAVEL_ORDER_OBJ = "travelOrderObj"
}
export { userDictionmary,DirtionmaryHelper }
......@@ -354,6 +354,11 @@ export default {
first: '帳單',
second: '月度請求書',
three: '匯款說明'
},
travel: {
first: '包机',
second: '包机服务',
three: ' '
}
},
login: {
......
<template>
<div>
<q-card
class="light-shadow q-pa-md bg-white rounded-borders q-mb-md"
flat
:class="$q.platform.is.desktop ? 'row' : ''"
v-for="(x, index) in orders"
>
<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 class="col-1">
<q-btn color="primary" unelevated @click="ViewPayment(x)">下单</q-btn>
</div>
</q-card>
<q-card
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-inner-loading
:showing="loading"
:label="$t('loading')"
label-class="text-grey-6 f12"
/>
</div>
<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>
<div class="q-mt-md f12 text-grey-6">{{ $t("noneData") }}</div>
</div>
<q-dialog v-model="showOrderdDetail">
<!-- <OrderdDetail :OrderID="OrderID"></OrderdDetail> -->
</q-dialog>
<q-dialog v-model="showAddOrder">
<AddOrder :info="info" @close="showAddOrder = false"></AddOrder>
</q-dialog>
</template>
<script lang="ts">
import { DirtionmaryHelper } from "../../../config/dictionary";
import { defineComponent, inject, reactive, toRefs, watch, toRaw } from "vue";
import travelService from "../../../api/travel";
import { ApiResult } from "../../../@types/enumHelper";
import message from "../../../utils/message";
import { RoomType, StandardStatus } from "../../../@types";
import { getHotelOrderStatus, getHotelRoomType, moneyFormat } from "../../../utils/tools";
import { useI18n } from "vue-i18n";
import svgIcon from "../../../global/svg-icon.vue";
import { copyToClipboard, useQuasar } from "quasar";
import { currentRouter } from "../../../router";
// import OrderdDetail from './OrderdDetail.vue'
// import BankAccount from '../../BankAccount.vue'
import AddOrder from "./addOrder.vue";
export default defineComponent({
components: { AddOrder },
setup(props) {
const search = inject(DirtionmaryHelper.TRAVEL_ORDER_OBJ) as any;
const { t } = useI18n();
const $q = useQuasar();
watch(search, (n, o) => {
if (data.loading) return;
data.pages.pageIndex = 1;
data.orders = [];
methods.initOrders();
});
const data = reactive({
info: {},
copyId: 0,
showAddOrder: false,
OrderID: "",
showOrderdDetail: false,
orders: [] as Array<any>,
status: [] as Array<StandardStatus>,
rooms: [] as Array<RoomType>,
pages: {
pageIndex: 1,
pageSize: 10,
pageCount: 0,
},
loadingCel: false,
loading: false,
});
const methods = {
changePageHandler(n: any) {
console.log(n);
data.pages.pageIndex = n;
methods.initOrders();
},
ViewPayment(info: any) {
data.info = toRaw(info);
console.log("ViewPayment", toRaw(info));
data.showAddOrder = true;
},
canCelHotel(ThirdOrderNo) {
$q.dialog({
title: t("dialog.titles.horder"),
message: t("dialog.contents.horder"),
cancel: true,
persistent: true,
}).onOk(() => {
methods.cancellations(ThirdOrderNo);
});
},
cancellations(ThirdOrderNo) {
if (data.loadingCel) return;
let msg = {
bookingNumber: ThirdOrderNo,
CancelBy: search.CustomerId,
CancelType: 2,
};
let param = Object.assign(msg);
data.loadingCel = true;
travelService
.getTravelList(param)
.then((r) => {
if (r.data.resultCode == ApiResult.SUCCESS) {
message.successMsg(`${t("success")}`);
methods.initOrders();
} else {
message.errorMsg(r.data.message);
}
data.loadingCel = false;
})
.catch((e) => {
message.errorMsg(e.message);
data.loadingCel = false;
});
},
getDetail(OrderID) {
data.showOrderdDetail = true;
data.OrderID = OrderID;
},
initOrders() {
data.loading = true;
let param = Object.assign(data.pages, search);
travelService
.getTravelList(param)
.then((r) => {
data.loading = false;
if (r.data.resultCode == ApiResult.SUCCESS) {
// r.data.data.pageData.forEach((x: any) => {
// x.typeInfo = data.status.find(y => y.StatusId == x.OrderStatus) ?? data.status[1]
// 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 {
message.errorMsg(r.data.message);
}
})
.catch((e) => {
message.errorMsg(e.message);
data.loading = false;
});
},
init() {
data.status = getHotelOrderStatus();
data.rooms = getHotelRoomType();
methods.initOrders();
},
setCopyHandler(order: any, ctx?: string) {
if (ctx) {
data.copyId = -1;
copyToClipboard(ctx);
} else {
data.copyId = order.OrderID;
copyToClipboard(order.ThirdOrderNo);
}
setTimeout(() => {
data.copyId = 0;
}, 2000);
},
};
methods.init();
return {
...toRefs(data),
...methods,
moneyFormat,
};
},
});
</script>
<style>
.light-border table,
.light-border table td,
.light-border .q-table__middle,
.light-border.borders,
.light-border table th {
border-color: #eee !important;
white-space: wrap;
}
.light-border .room-item {
height: 28px;
line-height: 28px;
border-bottom: 1px solid #eee;
}
.light-border .room-item:last-child {
border-bottom: none;
}
.light-border .max-hotelname {
width: 140px;
height: 28px;
line-height: 28px;
}
.orderListDialog-title {
position: relative;
}
.orderListDialog-title span {
font-size: 20px;
}
.orderListDialog-close {
position: absolute;
right: 0;
top: -10px;
font-size: 26px;
}
.orderListDialog-bg {
background: #5098ff;
border-radius: 10px;
}
.orderListDialog-img {
background: url("../../../assets/images/wallet.png") no-repeat right #5098ff;
background-size: 97px 100%;
}
</style>
<style scoped>
.mb-title {
font-weight: bold;
margin-bottom: 10px;
}
.mb {
margin-bottom: 10px;
}
</style>
\ No newline at end of file
<template>
<div class="rounded-borders bg-white row items-center q-pa-md">
<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>
<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>
<q-btn color="primary" unelevated :label="$t('query')" @click="setQueryHandler"/>
</div>
</template>
<script lang="ts">
import { DirtionmaryHelper } from '../../../config/dictionary'
import { defineComponent, inject, reactive, ref } from 'vue'
import { date } from 'quasar'
export default defineComponent({
setup(props) {
const qDateProxy = ref(null) as any
const realSearch = inject(DirtionmaryHelper.TRAVEL_ORDER_OBJ) as any
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 = {
setQueryHandler(){
realSearch.StartTime=search.StartTime
realSearch.EndTime=search.EndTime
realSearch.TCID=search.TCID
},
dateRangeHandler(e: any) {
search.StartTime = `${e.from.year}/${e.from.month}/${e.from.day}`
search.EndTime = `${e.to.year}/${e.to.month}/${e.to.day} `
dateRangeFormat.value = `${search.StartTime} - ${search.EndTime} `
if (qDateProxy.value) qDateProxy.value.hide()
},
optionsFn(cd: any) {
return cd >= date.formatDate(date.addToDate(new Date(), { days: 20 }), 'YYYY/MM/DD')
},
}
return {
...methods,
search,
dateRange,
dateRangeFormat
}
}
})
</script>
<style></style>
<style scoped>
/* .background {
backface-visibility: #fff;
padding: 20px;
} */
.heading {
font-size: 20px;
font-weight: bold;
}
.title {
margin: 20px 0 10px 0;
}
</style>
<template>
<q-card flat class="q-pa-md" style="background: #fff; width: 600px; min-width: 375px">
<div class="bacakground">
<div class="heading">新增/修改订单</div>
<q-form @submit="saveOrder">
<div class="row">
<div class="col">
<div class="title">成人数量</div>
<q-input
v-model="addMsg.ManNum"
class="col q-mr-md"
mask="#"
reverse-fill-mask
dense
type="text"
standout
@keyup.native="checkInteger(addMsg, 'ManNum')"
@update:model-value="
getNumber();
getHouseNo();
getTotalPrice();
"
></q-input
>
</div>
<div class="col">
<div class="title">老人数量</div>
<q-input
v-model="addMsg.OldPeopleNum"
class="col q-mr-md"
mask="#"
reverse-fill-mask
dense
type="text"
standout
@keyup.native="checkInteger(addMsg, 'OldPeopleNum')"
@update:model-value="
getNumber();
getHouseNo();
getTotalPrice();
autoRemarks('OldPeopleNum', '老人人数');
"
></q-input>
</div>
</div>
<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="title">单房数量</div>
<q-input
v-model="addMsg.SingleRoomNum"
class="col q-mr-md"
mask="#"
reverse-fill-mask
dense
type="text"
standout
@keyup.native="checkInteger(addMsg, 'SingleRoomNum')"
@update:model-value="
yzBigBed2();
getTotalPrice();
autoRemarks('SingleRoomNum', '单房数量');
"
></q-input>
</div>
</div>
<div class="row">
<div class="col">
<div class="title">大床房</div>
<q-input
v-model="addMsg.BigRoomNum"
class="col q-mr-md"
mask="#"
reverse-fill-mask
dense
type="text"
standout
@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="title">经济舱</div>
<q-input
v-model="addMsg.YSeatNum"
class="col q-mr-md"
mask="#"
reverse-fill-mask
dense
type="text"
standout
@keyup.native="checkInteger(addMsg, 'YSeatNum')"
></q-input>
</div>
</div>
<div class="row">
<div class="col">
<div class="title">头等舱</div>
<q-input
v-model="addMsg.FSeatNum"
class="col q-mr-md"
mask="#"
reverse-fill-mask
dense
type="text"
standout
@update:model-value="getNumber()"
></q-input>
</div>
<div class="col">
<div class="title">商务舱</div>
<q-input
v-model="addMsg.ESeatNum"
class="col q-mr-md"
mask="#"
reverse-fill-mask
dense
type="text"
standout
@update:model-value="getNumber()"
></q-input>
</div>
</div>
<div class="row">
<div class="col">
<div class="title">联系人</div>
<q-input
v-model="addMsg.ContactName"
class="col q-mr-md"
reverse-fill-mask
dense
type="text"
standout
:rules="[ val => val && val.length > 0 || ' ']"
></q-input>
</div>
<div class="col">
<div class="title">联系人电话</div>
<q-input
v-model="addMsg.ContactMobile"
class="col q-mr-md"
mask="#"
reverse-fill-mask
dense
type="text"
standout
:rules="[ val => val && val.length > 0 || ' ']"
></q-input>
</div>
</div>
<div>
<div class="title">备注</div>
<q-input
v-model="addMsg.Remarks"
class="col q-mr-md"
reverse-fill-mask
dense
type="text"
standout
></q-input>
</div>
<div class="row justify-between items-center">
<div class="title">订单价格</div>
<div class=" text-subtitle2 text-weight-bolder text-primary">{{ addMsg.PreferPrice }}</div>
</div>
<div class="row justify-end">
<q-btn unelevated class="bg-grey-3 hover q-mr-md" @click="cancel">取消</q-btn>
<q-btn :loading="loading" color="primary" unelevated class="q-ml-md" type="submit">确认</q-btn></div>
</q-form>
</div>
</q-card>
</template>
<script>
import { defineComponent, inject, reactive, toRefs, watch } from "vue";
import travelService from "../../../api/travel";
import { ApiResult } from "../../../@types/enumHelper";
import message from "../../../utils/message";
import { getStoreGetter } from "../../../store/utils";
export default defineComponent({
props: ["info"],
components: {},
setup(props,context) {
console.log("addOrder", props, props.info, props.info.TCID);
const addMsg = reactive({
OrderSource: 2,
price: 0,
GroupTypeNeedHouse: 0,
OrderId: 0,
OneSex: 0,
TCID: 0,
CustomerType: 2, // 默认为普通客户
GroupType: 1,
IndustryCategory: "",
ContactName: "",
ContactMobile: "",
CustomerId: "",
DepartureCityId: 0,
ReturnArriveCityId: "",
IsIntermodal: "2",
IsReturnIntermodal: "2",
Unit_Price: 0,
TC_Price: 0,
ManNum: 0, // 成人数量
ChirdNum: 0, // 小孩数量
ChirdNoNeedBedNum: 0,
ChirdNeedBedNum: 0,
BabyNum: 0,
OldPeopleNum: 0,
SingleRoomNum: 0,
PreferPrice: 0,
YSeatNum: 0,
ESeatNum: 0,
FSeatNum: 0,
Commission: 0,
ClientSource: 0,
BrandId: 0,
TradeWay: "2",
PlatformAccount: "",
PlatformOrder: "",
GuestNum: 0,
IsChildrenTour: 0,
IsBirdDiscount: 0,
PredictRoomNum: 0,
BigRoomNum: 0,
TripleRoomNum: 0,
TradeDate: "",
CostType: "",
Remarks: "",
VisaNum: 0,
SafeNum: 0,
AirticketNum: 0,
ScenicRefundArr: [],
GoCityTime: "",
BackCityTime: "",
CommissionSharePeople: 0,
CommissionShareMoney: 0,
OrderForm: "1",
SonControlID: "-1",
IsShowMessagesMoney: "2",
QuotationUrl: "", //单团附件
});
const data = reactive({
ScenicRefundList: [],
khlxList: [],
ctlxList: [],
addObj: {},
copyId: 0,
showBankAccount: false,
OrderID: "",
showOrderdDetail: false,
pages: {
pageIndex: 1,
pageSize: 10,
pageCount: 0,
},
loadingCel: false,
loading: false,
userInfo: null,
});
data.addObj = props.info;
data.userInfo = getStoreGetter("user", "getUser");
addMsg.TCID = props.info.TCID;
addMsg.TC_Price = data.addObj.B2BPrice;
addMsg.Unit_Price = data.addObj.B2BPrice;
const methods = {
changePeople(value) {
addMsg.OneSex = value
},
cancel() {context.emit('close')},
//验证只能输入整数【负数:isMinus传true】
checkInteger(item, filed, isMinus) {
var value = "" + item[filed]; //转字符串
var t = value.charAt(0);
value = value.replace(this.$commonUtils.Regex.isInteger, "");
//是否允许负数
if (isMinus && t == "-") {
value = "-" + value;
}
item[filed] = value;
},
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新增单地接儿童不占床 减去 儿童不占床
addMsg.PredictRoomNum =
(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);
console.log("getHouseNo", addMsg.PredictRoomNum);
},
getNumber() {
console.log('getNumber>>>>>>>>>>>>')
let ChirdNum = addMsg.ChirdNoNeedBedNum * 1 + addMsg.ChirdNeedBedNum * 1;
addMsg.ChirdNum = addMsg.ChirdNoNeedBedNum * 1 + addMsg.ChirdNeedBedNum * 1;
addMsg.VisaNum =
Number(addMsg.AirticketNum) +
Number(addMsg.ManNum) +
ChirdNum +
Number(addMsg.BabyNum) +
Number(addMsg.OldPeopleNum);
addMsg.SafeNum =
Number(addMsg.AirticketNum) +
Number(addMsg.ManNum) +
ChirdNum +
Number(addMsg.BabyNum) +
Number(addMsg.OldPeopleNum);
var TotalNumber =
Number(addMsg.AirticketNum) +
Number(addMsg.ManNum) +
ChirdNum +
Number(addMsg.BabyNum) +
Number(addMsg.OldPeopleNum);
var SeatNum =
Number(addMsg.ManNum) +
Number(addMsg.ChirdNum) +
Number(addMsg.OldPeopleNum) -
(Number(addMsg.ESeatNum) + Number(addMsg.FSeatNum));
addMsg.YSeatNum = SeatNum < 0 ? 0 : SeatNum;
methods.autoRemarks("VisaNum", "不要签证数量");
},
yzBigBed2() {
let x =
Number(addMsg.AirticketNum) +
Number(addMsg.ManNum) +
Number(addMsg.ChirdNeedBedNum) +
Number(addMsg.OldPeopleNum) -
Number(addMsg.SingleRoomNum);
let y = x - Number(addMsg.TripleRoomNum) * 3 - Number(addMsg.BigRoomNum) * 2;
if (y < 0) {
addMsg.SingleRoomNum = 0;
}
methods.getHouseNo();
methods.autoRemarks("SingleRoomNum", "单房数量");
},
// 自动添加备注
autoRemarks(key, text) {},
// 计算价格
getTotalPrice() {
addMsg.ChirdNum =
addMsg.ChirdNoNeedBedNum * 1 + addMsg.ChirdNeedBedNum * 1;
if (data.addObj.IsBirdDiscount == 1) {
//早鸟优惠
//addMsg.Unit_Price //成交单价
//BabyPrice 婴儿价
//BabyChargePrice 儿童附加费
//OldManChargePrice 老人 附加费
//DiscountPrice 早鸟优惠
let chengren =
Number(addMsg.ManNum) *
(Number(addMsg.Unit_Price) - data.addObj.DiscountPrice);
let ertong =
Number(addMsg.ChirdNum) *
(Number(addMsg.Unit_Price) -
data.addObj.DiscountPrice +
data.addObj.BabyChargePrice);
let yinger = Number(addMsg.BabyNum) * data.addObj.BabyPrice;
let laoren =
Number(addMsg.OldPeopleNum) *
(Number(addMsg.Unit_Price) -
data.addObj.DiscountPrice +
data.addObj.OldManChargePrice);
let zafeiqianzhen =
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)) -
(data.addObj.BackVisaPrice || 0) *
(Number(addMsg.AirticketNum) +
Number(addMsg.ManNum) +
Number(addMsg.ChirdNum) +
Number(addMsg.BabyNum) +
Number(addMsg.OldPeopleNum) -
Number(addMsg.VisaNum));
let danfang =
Number(addMsg.SingleRoomNum) * data.addObj.SingleRoomPrice;
let ertongbed =
data.addObj.ChildNeedPrice * Number(addMsg.ChirdNeedBedNum) -
data.addObj.ChildNoNeedPrice *
(Number(addMsg.ChirdNum) -
Number(addMsg.ChirdNeedBedNum));
let lianyun = 0
// (Number(addMsg.ManNum) +
// Number(addMsg.ChirdNum) +
// Number(addMsg.OldPeopleNum)) *
// (Number(this.stratPrice) + Number(this.returnPrice));
let dandijie;
dandijie =
(data.addObj.SingleDMCPrice || 0) * Number(addMsg.AirticketNum);
addMsg.PreferPrice =
dandijie +
lianyun +
chengren +
ertong +
yinger +
laoren +
zafeiqianzhen +
danfang +
ertongbed
} else {
let chengren =
Number(addMsg.ManNum) * Number(addMsg.Unit_Price);
let ertong =
Number(addMsg.ChirdNum) *
(Number(addMsg.Unit_Price) + data.addObj.BabyChargePrice);
let yinger = Number(addMsg.BabyNum) * data.addObj.BabyPrice;
let laoren =
Number(addMsg.OldPeopleNum) *
(Number(addMsg.Unit_Price) + data.addObj.OldManChargePrice);
let zafeiqianzhen =
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)) -
(data.addObj.BackVisaPrice || 0) *
(Number(addMsg.AirticketNum) +
Number(addMsg.ManNum) +
Number(addMsg.ChirdNum) +
Number(addMsg.BabyNum) +
Number(addMsg.OldPeopleNum) -
Number(addMsg.VisaNum));
let danfang =
Number(addMsg.SingleRoomNum) * data.addObj.SingleRoomPrice;
let ertongbed =
data.addObj.ChildNeedPrice * Number(addMsg.ChirdNeedBedNum) -
data.addObj.ChildNoNeedPrice *
(Number(addMsg.ChirdNum) -
Number(addMsg.ChirdNeedBedNum));
let lianyun = 0
// (Number(addMsg.ManNum) +
// Number(addMsg.ChirdNum) +
// Number(addMsg.OldPeopleNum)) *
// (Number(this.stratPrice) + Number(this.returnPrice));
let dandijie;
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 =
dandijie +
lianyun +
chengren +
ertong +
yinger +
laoren +
zafeiqianzhen +
danfang +
ertongbed
}
// TODO
// methods.getTicheng();
// methods.getTypePrice();
},
getTicheng() {
//提成
let num =
Number(addMsg.ManNum) + Number(addMsg.ChirdNum) + Number(addMsg.OldPeopleNum);
let yh = 0;
if (num > 0) {
this.apipost(
"sellorder_get_GetOrderMinPrice",
{
ltID: data.addObj.ltID,
Num: num,
},
(res) => {
yh = res.data.data;
},
(err) => {}
);
}
// let cj='成交单价-最低成交价格(标准单价-符合人数[成人,儿童,老人]条件的最高少价)'
let chajia = Number(addMsg.Unit_Price) - (addMsg.TC_Price - yh);
let ewtc = chajia > 0 ? chajia * 0.5 * num : chajia * num; //额外提成
addMsg.Commission = (Number(addMsg.PreferPrice) * 0.01 + ewtc).toFixed(2);
addMsg.CommissionShareMoney = 0;
if (
(addMsg.CustomerType == 1 || addMsg.CustomerType == 2) &&
addMsg.CommissionSharePeople != ""
) {
if (addMsg.CommissionSharePeople != "-1") {
if (addMsg.Commission > 0) {
addMsg.CommissionShareMoney = addMsg.Commission / 2;
addMsg.Commission = addMsg.Commission - addMsg.CommissionShareMoney;
} else {
addMsg.CommissionShareMoney = 0;
}
}
}
},
getTypePrice() {
//addMsg.ContactName = ''
//addMsg.ContactMobile = ''
if (addMsg.CustomerType == 1) {
addMsg.TC_Price = data.addObj.B2BMemberPrice;
addMsg.Unit_Price = data.addObj.B2BMemberPrice;
//addMsg.CustomerId = ''
}
if (addMsg.CustomerType == 2) {
addMsg.TC_Price = data.addObj.B2BPrice;
addMsg.Unit_Price = data.addObj.B2BPrice;
//addMsg.CustomerId = ''
}
if (addMsg.CustomerType == 3) {
addMsg.TC_Price = data.addObj.B2CMemberPrice;
addMsg.Unit_Price = data.addObj.B2CMemberPrice;
addMsg.CustomerId = 0;
addMsg.CommissionShareMoney = 0;
}
if (addMsg.CustomerType == 4) {
addMsg.TC_Price = data.addObj.B2CPrice;
addMsg.Unit_Price = data.addObj.B2CPrice;
addMsg.CustomerId = 0;
addMsg.CommissionShareMoney = 0;
}
this.Unit_PriceList = [];
let maxPeopleNum =
Number(addMsg.ManNum) +
Number(addMsg.ChirdNoNeedBedNum) +
Number(addMsg.ChirdNeedBedNum) +
Number(addMsg.OldPeopleNum) +
Number(addMsg.AirticketNum);
if (maxPeopleNum > 0) {
this.apipost(
"sellorder_post_GetLessPrice",
{
TCID: data.addObj.TCID,
MaxPeopleNum: maxPeopleNum,
},
(res) => {
this.LessMoney = res.data.data.lessMoney;
if (parseFloat(this.LessMoney) > 0) {
for (var i = 0; i <= parseInt(this.LessMoney) / 10; i++) {
var obj = {
ID: "",
LessMoney: "",
};
obj.ID = addMsg.Unit_Price - i * 10;
obj.LessMoney = addMsg.Unit_Price - i * 10;
this.Unit_PriceList.push(obj);
}
if (
this.Unit_PriceList.findIndex(
(markers) => markers.ID == addMsg.Unit_Price
) < 0
) {
var obj = {
ID: "",
LessMoney: "",
};
obj.ID = addMsg.Unit_Price;
obj.LessMoney = addMsg.Unit_Price;
this.Unit_PriceList.push(obj);
}
} else {
var obj = {
ID: "",
LessMoney: "",
};
obj.ID = addMsg.Unit_Price;
obj.LessMoney = addMsg.Unit_Price;
this.Unit_PriceList.push(obj);
}
},
(err) => {}
);
}
},
clearMsg() {
addMsg.OrderId = 0;
addMsg.TCID = 0;
addMsg.IsIntermodal = "2";
addMsg.IsReturnIntermodal = "2";
addMsg.Unit_Price = 0;
addMsg.TC_Price = 0;
addMsg.ManNum = 0;
addMsg.ChirdNum = 0;
addMsg.ChirdNeedBedNum = 0;
addMsg.BabyNum = 0;
addMsg.OldPeopleNum = 0;
addMsg.SingleRoomNum = 0;
addMsg.PreferPrice = 0;
addMsg.YSeatNum = 0;
addMsg.ESeatNum = 0;
addMsg.FSeatNum = 0;
addMsg.Commission = 0;
addMsg.BrandId = 0;
addMsg.PlatformAccount = "";
addMsg.TradeWay = "2";
addMsg.GuestNum = 0;
addMsg.IsChildrenTour = 0;
addMsg.OrderId = 0;
addMsg.IsBirdDiscount = 0;
addMsg.PredictRoomNum = 0;
addMsg.BigRoomNum = 0;
addMsg.TripleRoomNum = 0;
addMsg.TradeDate = "";
addMsg.CostType = "";
addMsg.PlatformOrder = "";
addMsg.Remarks = "";
addMsg.MinOrderPrice = "";
addMsg.VisaNum = 0;
addMsg.SafeNum = 0;
addMsg.AirticketNum = 0;
addMsg.ScenicRefundArr = [];
addMsg.CommissionSharePeople = "-1";
addMsg.CommissionShareMoney = 0;
addMsg.IsShowMessagesMoney = "2";
addMsg.OneSex = 0;
},
saveOrder() {
console.log("EmployeeId", data.userInfo);
addMsg.CustomerId = data.userInfo.customerId;
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
.newOrder(addMsg)
.then((r) => {
data.loading = false;
if (r.data.resultCode == ApiResult.SUCCESS) {
message.successMsg('操作成功');
context.emit('close')
} else {
message.errorMsg(r.data.message);
}
})
.catch((e) => {
message.errorMsg(e.message);
data.loading = false;
});
},
};
return {
...toRefs(data),
addMsg,
...methods,
};
},
});
</script>
<style></style>
<template>
<div class="fix-height-subpage column no-wrap q-pa-md">
<order-list-header></order-list-header>
<div class="col q-mt-md">
<order-list></order-list>
</div>
</div>
</template>
<script lang="ts">
import { inject, provide, reactive, toRefs, defineComponent,onMounted } from 'vue';
import travelService from '../../api/travel'
import { SendType, StandardStatus } from '../../@types'
import { ApiResult } from '../../@types/enumHelper'
import message from '../../utils/message'
import { useI18n } from 'vue-i18n'
import OrderListHeader from './components/OrderListHeader.vue';
import OrderList from './components/OrderList.vue';
import { DirtionmaryHelper } from '../../config/dictionary';
export default defineComponent({
components: {OrderListHeader, OrderList},
props: ['OrderId'],
setup(props) {
const { t } = useI18n()
const data = reactive({
PaymentDialog: false,
orders: [] as Array<any>,
status: [] as Array<StandardStatus>,
sends: [] as Array<SendType>,
showBankAccount: false,
pages: {
pageIndex: 1,
pageSize: 10,
pageCount: 0
},
loading: false,
copyId: 0,
expendsOrderId: 0,
cols: [
{ name: 'Date', label: t('v102.ticket.jq')+'('+t('v102.ticket.d')+')', field: (row: any) => row.Date, align: 'left' },
{ name: 'TicketName', label: t('v102.ticket.hn'), field: (row: any) => row.TicketName, align: 'left' },
{ name: 'Num', label: t('v102.ticket.sl'), field: (row: any) => row.Num, align: 'left' },
{ name: 'Money', label: t('hotelorder.col.m'), field: (row: any) => row.Money, align: 'left' }
] as any[],
modifyOrder:{} as any,
showModify:false,
})
const search = reactive({
GTeamName:"", // 包机名称
FlightCompany:"", // 航空公司
FlightNo:"", // 航班号
SelectEndDate:"", // 出发开始时间
SelectStartDate:"", // 出发结算时间
})
const methods = {
}
provide(DirtionmaryHelper.TRAVEL_ORDER_OBJ,search)
onMounted(()=>{
})
return {
// ...toRefs(data),
...methods
}
}
})
</script>
<style>
</style>
\ No newline at end of file
......@@ -36,7 +36,7 @@ const routes: RouteRecordRaw[] = [
{ path: '/scheduledTrip/details/:id/:tcid', component: () => import('pages/scheduledTrip/detailsNew.vue') },
{ path: '/scheduledTrip/preview/:tripId', component: () => import('pages/scheduledTrip/TripOrderPreview.vue') },
{ path: '/scheduledTrip/order/:orderId?', component: () => import('pages/scheduledTrip/TripOrder.vue') },
{ path: '/travel/order', component: () => import('pages/travel/order.vue') },
]
},
{
......
......@@ -137,6 +137,27 @@ const useMenus = {
}
]
})
menus.push({
name: t('menu.travel.first'),
url: '',
id: 10,
parentId: 0,
icon: 'Shopping/Money.svg',
childs: [
{
name: t('menu.travel.second'),
url: '/travel/order',
id: 11,
parentId: 10,
},
// {
// name: t('menu.travel.three'),
// url: '/comingsoon',
// id: 12,
// parentId: 10,
// }
]
})
return menus
}
}
......
This source diff could not be displayed because it is too large. You can view the blob instead.
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