Commit e65cebfa authored by 沈良进's avatar 沈良进

save

parent 48af0970
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
"editor.fontSize": 15, "editor.fontSize": 15,
"editor.wordWrap": "wordWrapColumn", "editor.wordWrap": "wordWrapColumn",
"editor.accessibilitySupport": "auto", "editor.accessibilitySupport": "auto",
"editor.renderFinalNewline": false, "editor.renderFinalNewline": "off",
"workbench.editor.wrapTabs": true, "workbench.editor.wrapTabs": true,
"editor.unicodeHighlight.nonBasicASCII": true "editor.unicodeHighlight.nonBasicASCII": true
} }
This diff is collapsed.
...@@ -64,7 +64,7 @@ module.exports = configure(function (ctx) { ...@@ -64,7 +64,7 @@ module.exports = configure(function (ctx) {
publicPath: ctx.dev ? '/' : './', publicPath: ctx.dev ? '/' : './',
env: 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', JAVA_URL_API: 'http://efficient.oytour.com',
VERSION:require('./package.json').version, 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 { ...@@ -93,5 +93,9 @@ class DirtionmaryHelper {
* 元素滚动參數 * 元素滚动參數
*/ */
static readonly SCROLL_AREA_OBJ = "scrollareaobj" static readonly SCROLL_AREA_OBJ = "scrollareaobj"
/**
* 包机订单列表
*/
static readonly TRAVEL_ORDER_OBJ = "travelOrderObj"
} }
export { userDictionmary,DirtionmaryHelper } export { userDictionmary,DirtionmaryHelper }
...@@ -354,6 +354,11 @@ export default { ...@@ -354,6 +354,11 @@ export default {
first: '帳單', first: '帳單',
second: '月度請求書', second: '月度請求書',
three: '匯款說明' three: '匯款說明'
},
travel: {
first: '包机',
second: '包机服务',
three: ' '
} }
}, },
login: { login: {
......
<template>
<div>
<q-card class="light-shadow q-pa-md bg-white rounded-borders q-mb-md" flat v-for="(x,index) in orders">
<div>{{x.GTeamName}}</div>
<!-- <div>{{x.CreateTime}}</div> -->
<div>{{x.StartDate}}</div>
<div>
<div>{{x.Remark}}</div>
</div>
<div>
<q-btn @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,
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 = {
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>
<template>
<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-input class="q-mr-md" v-model="search.HotelName" dense standout :label="$t('v101.scatteredOrderList.first')"/>
<div class="col"></div>
<q-btn color="primary" unelevated :label="$t('query')" @click="setQueryHandler"/>
</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>
<script lang="ts">
import { DirtionmaryHelper } from '../../../config/dictionary'
import { computed, defineComponent, inject, reactive, ref, toRefs } from 'vue'
import { OrderType, RoomType, StandardStatus } from '../../../@types'
import { getScatteredHotelOrderStatus, getHotelOrderType, getHotelRoomType } from '../../../utils/tools'
import { date,useQuasar } from 'quasar'
export default defineComponent({
setup(props) {
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 search = reactive(JSON.parse(JSON.stringify(realSearch)))
const methods = {
initStatus() {
let allStatus = getScatteredHotelOrderStatus()
data.status = allStatus.filter((x: StandardStatus) => {
return x.StatusId != 4
})
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) {
search.StartTime = `${e.from.year}/${e.from.month}/${e.from.day}`
search.EndTime = `${e.to.year}/${e.to.month}/${e.to.day} `
data.dateRangeFormat = `${search.StartTime} - ${search.EndTime} `
if (qDateProxy.value) qDateProxy.value.hide()
},
setQueryHandler(){
realSearch.B2BSelectOrderState=search.B2BSelectOrderState
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 {
...toRefs(data),
...methods,
search,
searchCnt
}
}
})
</script>
<style></style>
This diff is collapsed.
<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[] = [ ...@@ -36,7 +36,7 @@ const routes: RouteRecordRaw[] = [
{ path: '/scheduledTrip/details/:id/:tcid', component: () => import('pages/scheduledTrip/detailsNew.vue') }, { path: '/scheduledTrip/details/:id/:tcid', component: () => import('pages/scheduledTrip/detailsNew.vue') },
{ path: '/scheduledTrip/preview/:tripId', component: () => import('pages/scheduledTrip/TripOrderPreview.vue') }, { path: '/scheduledTrip/preview/:tripId', component: () => import('pages/scheduledTrip/TripOrderPreview.vue') },
{ path: '/scheduledTrip/order/:orderId?', component: () => import('pages/scheduledTrip/TripOrder.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 = { ...@@ -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 return menus
} }
} }
......
This diff is collapsed.
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