Commit 8832469f authored by 罗超's avatar 罗超

修改

parent ce42cba9
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
"@types/webpack-env": "^1.16.2", "@types/webpack-env": "^1.16.2",
"axios": "^0.21.1", "axios": "^0.21.1",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"echarts": "^5.6.0",
"html2canvas": "^1.4.1", "html2canvas": "^1.4.1",
"js-md5": "^0.7.3", "js-md5": "^0.7.3",
"katex": "^0.13.18", "katex": "^0.13.18",
......
...@@ -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.5.204:8030/api/common/post', BASE_APP_API: 'http://reborn.oytour.com/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 NoticeService {
// 提交訂單
static async getNoticeList(param:any):Promise<HttpResponse>{
return request('User_get_NoticeGetPageList',param)
}
}
export default NoticeService
...@@ -22,9 +22,9 @@ declare module 'vue-i18n' { ...@@ -22,9 +22,9 @@ declare module 'vue-i18n' {
} }
let Language let Language
if (getDomainName()) { if (getDomainName()) {
Language = localStorage.getItem('lanuage') ?? 'inID' Language = localStorage.getItem('lanuage2') ?? 'enUS'
} else { } else {
Language = localStorage.getItem('lanuage') ?? 'inID' Language = localStorage.getItem('lanuage2') ?? 'enUS'
} }
const i18n = createI18n({ const i18n = createI18n({
locale: Language, locale: Language,
......
...@@ -115,7 +115,7 @@ export default defineComponent({ ...@@ -115,7 +115,7 @@ export default defineComponent({
getLanguage(val: SitLang) { getLanguage(val: SitLang) {
locale.value = val.langLocale ?? ""; locale.value = val.langLocale ?? "";
data.currentLang = val; data.currentLang = val;
localStorage.setItem("lanuage", val.langLocale ?? ""); localStorage.setItem("lanuage2", val.langLocale ?? "");
window.location.reload(); window.location.reload();
}, },
signOut() { signOut() {
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
}}</q-item-section> }}</q-item-section>
</q-item> </q-item>
<template v-if="user && user.groupId == 2"> <template v-if="user && user.groupId == 2">
<q-item clickable v-ripple class="rounded-borders lang-demo"> <!-- <q-item clickable v-ripple class="rounded-borders lang-demo">
<q-item-section> <q-item-section>
<div class="row items-center"> <div class="row items-center">
<div class="q-mr-md">{{ $t("userMenu.myfinace") }}</div> <div class="q-mr-md">{{ $t("userMenu.myfinace") }}</div>
...@@ -42,15 +42,15 @@ ...@@ -42,15 +42,15 @@
/> />
</div> </div>
</q-item-section> </q-item-section>
</q-item> </q-item> -->
<q-item clickable v-ripple class="rounded-borders lang-demo"> <q-item clickable v-ripple class="rounded-borders lang-demo">
<q-item-section>{{ $t("userMenu.fapiao") }}</q-item-section> <q-item-section>{{ $t("userMenu.fapiao") }}</q-item-section>
</q-item> </q-item>
<q-item clickable v-ripple class="rounded-borders lang-demo"> <!-- <q-item clickable v-ripple class="rounded-borders lang-demo">
<q-item-section @click="goUrl('/passbook')">{{ <q-item-section @click="goUrl('/passbook')">{{
$t("v104.passbook.pageTitle") $t("v104.passbook.pageTitle")
}}</q-item-section> }}</q-item-section>
</q-item> </q-item> -->
</template> </template>
</q-list> </q-list>
...@@ -119,7 +119,7 @@ export default defineComponent({ ...@@ -119,7 +119,7 @@ export default defineComponent({
if (data.langs && data.langs.length > 0) { if (data.langs && data.langs.length > 0) {
data.currentLang = data.langs.find((x) => x.langLocale == locale.value) ?? {}; data.currentLang = data.langs.find((x) => x.langLocale == locale.value) ?? {};
} }
console.log(props.user)
// 切换语言 // 切换语言
const methods = { const methods = {
goUrl(url: string) { goUrl(url: string) {
...@@ -128,7 +128,7 @@ export default defineComponent({ ...@@ -128,7 +128,7 @@ export default defineComponent({
getLanguage(val: SitLang) { getLanguage(val: SitLang) {
locale.value = val.langLocale ?? ""; locale.value = val.langLocale ?? "";
data.currentLang = val; data.currentLang = val;
localStorage.setItem("lanuage", val.langLocale ?? ""); localStorage.setItem("lanuage2", val.langLocale ?? "");
window.location.reload(); window.location.reload();
}, },
signOut() { signOut() {
......
<template> <template>
<div class="bg-white q-mt-lg" :style="{'margin':$q.platform.is.mobile?'0 10px':''}"> <div class="bg-white q-mt-lg" :style="{'margin':$q.platform.is.mobile?'0 10px':''}">
<rebatehead :title="titleHead"/> <rebatehead :title="titleHead"/>
<q-separator color="grey-3" class="q-my-sm" /> <q-separator color="grey-3" class="q-my-sm" />
<div class=" q-pt-md" <div class=" q-pt-md"
:class="[$q.platform.is.desktop?'q-px-lg':'q-px-md']"> :class="[$q.platform.is.desktop?'q-px-lg':'q-px-md']">
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<div class="self-center full-width no-outline" tabindex="0">{{ queryTime }}</div> <div class="self-center full-width no-outline" tabindex="0">{{ queryTime }}</div>
<q-popup-proxy cover transition-show="scale" <q-popup-proxy cover transition-show="scale"
:offset="[0, 7]" transition-hide="scale" ref="qDateProxy" > :offset="[0, 7]" transition-hide="scale" ref="qDateProxy" >
<q-date v-model="queryTime" mask="YYYY-MM" <q-date v-model="queryTime" mask="YYYY-MM"
reason="month" reason="month"
default-view="Months" default-view="Months"
default-year-month="2024-01" default-year-month="2024-01"
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
<q-separator color="grey-3" /> <q-separator color="grey-3" />
<div class="column"> <div class="column">
<template v-if="dataList&&dataList.length>0"> <template v-if="dataList&&dataList.length>0">
<div <div
v-for="(item,index) in dataList" v-for="(item,index) in dataList"
class="row items-center left-text text-dark"> class="row items-center left-text text-dark">
<div>{{item.updateTime}}</div> <div>{{item.updateTime}}</div>
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
</div> </div>
</template> </template>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
...@@ -95,7 +95,7 @@ ...@@ -95,7 +95,7 @@
const main = ref(); const main = ref();
const timeStamp = Date.now() const timeStamp = Date.now()
const formattedString = date.formatDate(timeStamp, 'MM') const formattedString = date.formatDate(timeStamp, 'MM')
const data=reactive({ const data=reactive({
dateRange: {} as any, dateRange: {} as any,
queryTime: '', queryTime: '',
...@@ -109,12 +109,12 @@ ...@@ -109,12 +109,12 @@
const methods = { const methods = {
dateRangeHandler(event) { dateRangeHandler(event) {
if(event&&event.year&&event.month){ if(event&&event.year&&event.month){
data.queryTime = event.year+'-'+(event.month>10?event.month:'0'+event.month) data.queryTime = event.year+'-'+(event.month>10?event.month:'0'+event.month)
} }
else data.queryTime = '' else data.queryTime = ''
if(qDateProxy.value) qDateProxy.value.hide() if(qDateProxy.value) qDateProxy.value.hide()
methods.getList() methods.getList()
}, },
getList(){ getList(){
let CustomerId let CustomerId
...@@ -127,7 +127,7 @@ ...@@ -127,7 +127,7 @@
// let list = r.data.data.pageData.forEach(item=>{ // let list = r.data.data.pageData.forEach(item=>{
// item.updateTime = date.formatDate(item.updateTime, 'YYYY/MM/DD') // item.updateTime = date.formatDate(item.updateTime, 'YYYY/MM/DD')
// }) // })
data.dataList= r.data.data.pageData; data.dataList= r.data.data.pageData;
} else { } else {
message.errorMsg(r.data.message) message.errorMsg(r.data.message)
} }
......
...@@ -15,8 +15,10 @@ class DirtionmaryHelper { ...@@ -15,8 +15,10 @@ class DirtionmaryHelper {
*/ */
static readonly MENU_KEYS='Current_Menu_Cehck' static readonly MENU_KEYS='Current_Menu_Cehck'
/**
* 公告彈窗數據
*/
static readonly NOTICE_DIALOG_DATA = 'noticeDialogData'
/** /**
* 菜單選項 * 菜單選項
*/ */
...@@ -33,7 +35,7 @@ class DirtionmaryHelper { ...@@ -33,7 +35,7 @@ class DirtionmaryHelper {
* 酒店查詢參數 * 酒店查詢參數
*/ */
static readonly HOTEL_QUERY_PARAM = 'hotelqueryparam' static readonly HOTEL_QUERY_PARAM = 'hotelqueryparam'
/** /**
* 道旅酒店查詢參數 * 道旅酒店查詢參數
*/ */
......
export default { export default {
lanuage: 'Language',
failed: 'Execution failed', failed: 'Execution failed',
success: 'Execution successful', success: 'Execution successful',
appsuffix: 'PIC Interbank Booking System', appsuffix: 'PIC Interbank Booking System',
siteName: 'Interbank Booking System', siteName: 'Interbank Booking System',
language: 'System language', language: 'Language',
loginout: 'Login information invalid, please log in again', loginout: 'Login information invalid, please log in again',
timeout: 'Current network environment is abnormal, request timeout', timeout: 'Current network environment is abnormal, request timeout',
syslog: 'System Upgrade Notice', syslog: 'System Upgrade Notice',
sysmsg: 'System notification', sysmsg: 'System notification',
daterange: 'Please select the retrieval date', daterange: 'Please choose a date',
morequery: 'More filtering options', morequery: 'More filtering options',
query: 'Search', query: 'Search',
noneData: 'No relevant data found', noneData: 'No relevant data found',
...@@ -33,19 +34,20 @@ export default { ...@@ -33,19 +34,20 @@ export default {
d: 'Seaside Resort Hotel' d: 'Seaside Resort Hotel'
}, },
personal: { personal: {
ProfileDetails: 'Detail Profile',
pageTitle: 'Personal Profile', pageTitle: 'Personal Profile',
trading: 'Accumulated transaction amount', trading: 'Accumulated transaction amount',
order: 'Order quantity', order: 'Order quantity',
cancel: 'Cancellation rate', cancel: 'Cancellation rate',
profileDetails: 'Data details', profileDetails: 'Data details',
travelAgency: 'Name of travel agency', TravelAgency: 'Travel Name',
numbering: 'Unified numbering (unified)', numbering: 'Unified numbering (unified)',
LINEID: 'LINE ID', LINEID: 'LINE ID',
Phone: 'Contact number', Phone: 'Contact number',
address: 'Office address', addreess: 'Address',
Name: 'Name', Name: 'Name',
Email: 'Email', Email: 'Email',
post: 'Responsible person', post: 'PIC',
profile: 'Overview', profile: 'Overview',
security: 'Account security', security: 'Account security',
accountUpdate: 'Account information modification prompt', accountUpdate: 'Account information modification prompt',
...@@ -134,12 +136,12 @@ export default { ...@@ -134,12 +136,12 @@ export default {
recovery: 'Order Recycle Bin', recovery: 'Order Recycle Bin',
copy: 'Copy', copy: 'Copy',
copyed: 'Copied', copyed: 'Copied',
createTime: 'Order time', createTime: 'Booking Time',
priceTips: 'Based on the number of occupants * unit price of room type=subtotal of total room type price (excluding tax)', priceTips: 'Based on the number of occupants * unit price of room type=subtotal of total room type price (excluding tax)',
people: 'Number of people', people: 'Number of people',
unitPrice: 'Unit price', unitPrice: 'Unit price',
xj: 'Sub', xj: 'Sub',
orderMoney: 'Total order amount', orderMoney: 'Total Amount',
payed: 'Paid', payed: 'Paid',
warn: 'View reserved precautions', warn: 'View reserved precautions',
taxed: 'including tax', taxed: 'including tax',
...@@ -173,7 +175,7 @@ export default { ...@@ -173,7 +175,7 @@ export default {
}, },
search: { search: {
status: 'Order status', status: 'Order status',
orderNum: 'Order number', orderNum: 'Booking Number',
daterange: 'Order placement time', daterange: 'Order placement time',
roomType: 'Hotel Room Type', roomType: 'Hotel Room Type',
orderId: 'Order serial number', orderId: 'Order serial number',
...@@ -256,7 +258,7 @@ export default { ...@@ -256,7 +258,7 @@ export default {
title1: 'Days, check-in', title1: 'Days, check-in',
title2: 'Hotels', title2: 'Hotels',
subtitle: 'Hotel Purchase Order', subtitle: 'Hotel Purchase Order',
sumPrice: 'Total order amount' sumPrice: 'Total Amount'
}, },
shopping: { shopping: {
labelNum: 'Number of rooms', labelNum: 'Number of rooms',
...@@ -321,7 +323,7 @@ export default { ...@@ -321,7 +323,7 @@ export default {
mypro: 'Personal profile', mypro: 'Personal profile',
myfinace: 'Request letter', myfinace: 'Request letter',
fapiao: 'Request invoice', fapiao: 'Request invoice',
lang: 'System Language', lang: 'Language',
signOut: 'Log out' signOut: 'Log out'
}, },
menu: { menu: {
...@@ -357,88 +359,120 @@ export default { ...@@ -357,88 +359,120 @@ export default {
three: 'Remittance instructions' three: 'Remittance instructions'
}, },
travel: { travel: {
first: 'PAK', first: 'Consrotium',
second: 'PAK group', second: 'Group Detail',
three: 'PAK order', three: 'Booking list',
four: 'PAK settlement', four: 'Settlement',
} },
notice: {
first: 'Announcement',
second: 'List',
}
}, },
notice: {
pageTitle: 'Announcement',
search: {
title: 'Announcement Title',
},
column: {
title: 'Announcement Title',
publisher: 'Publisher',
releaseDate: 'Release Date',
action: 'Action',
},
placeholder: {
title: 'Please enter the title',
},
view:'View',
detail: {
title: 'Announcement Details',
file: 'Attachment',
}
},
travel: { travel: {
status:{
normal:'All',
regular:'Regular',
reserve:'Reserve',
waiting:'Waiting List',
cancel:'Cancel'
},
start:'Departure', start:'Departure',
download:'Download itinerary', download:'Download itinerary',
returnMoney:'Current return amount', returnMoney:'Return Amount',
queryDetail:'View return details', queryDetail:'View Return Amount',
peopleRequired:'Number of people required', peopleRequired:'Number of People',
totalSeat:'Total team', totalSeat:'Total Seat',
ratio:'Return ratio', ratio:'Return Amount',
current:'Current', current:'Current',
people:'person', people:'person',
startCity:'Departure city', startCity:'Departure city',
man: 'Number of adults', man: 'Adult',
addTitle: 'Add/Modify Order', addTitle: 'Additional/Edit',
oldPeople: 'Number of elderly people', oldPeople: 'Number of elderly people',
childNeedBed: 'Children occupying beds', childNeedBed: 'Child w bed',
children: 'Number of children', children: 'Child',
ChirdNoNeedBedNum: 'Children do not occupy beds', ChirdNoNeedBedNum: 'Child w/o bed',
NoNeedBed: 'No bed occupied', NoNeedBed: 'Child w/o bed',
Baby: 'Baby', Baby: 'Infant',
BabyNum: 'Number of Babies', BabyNum: 'Infant',
SingleRoomNum: 'Number of rooms per unit', SingleRoomNum: 'Total Single Room',
VisaNum: 'Number of visas', VisaNum: 'Visa',
OneSex: 'Single men and women', OneSex: 'Additional Person',
male: 'Male', male: 'Male',
woman: 'Female', woman: 'Female',
PredictRoomNum: 'Expected room usage', PredictRoomNum: 'Total Room',
YSeatNum: 'Economy Class', YSeatNum: 'Economy Class',
FSeatNum: 'First Class', FSeatNum: 'First Class',
ESeatNum: 'Business Class', ESeatNum: 'Business Class',
ContactName: 'Contact', ContactName: 'Contact',
ContactMobile: 'Contact phone number', ContactMobile: 'Contact phone number',
Remarks: 'Remarks', Remarks: 'Remarks',
PreferPrice: 'Order price', PreferPrice: 'Total Amount',
cancel: 'Cancel', cancel: 'Cancel',
submit: 'Confirm', submit: 'Confirm',
pays: 'Received amount', pays: 'Receive Amount',
startDate: 'Departure date', startDate: 'Departure date',
guestNum: 'Number of customers', guestNum: 'Total Pax',
unit_Price: 'Transaction Unit Price', unit_Price: 'Final Price',
tC_Price: 'Unit price of this group', tC_Price: 'Selling Price',
tradeWay: 'Payment method', tradeWay: 'Payment method',
online: 'Online', online: 'Online',
notLine: 'Offline', notLine: 'Offline',
all: 'unlimited', all: 'All',
notPay: 'Deposit to be collected', notPay: 'Deposit to be collected',
payed: 'Pending final payment', payed: 'Pending final payment',
orderStatus: 'Order status', orderStatus: 'Booking Status',
createDate: 'Creation date', createDate: 'Booking Date',
payStatus: 'Payment Status', payStatus: 'Payment Status',
id: 'Team ID', id: 'Code Group',
planInfo: 'Charter flight information', planInfo: 'Charter flight information',
groupInfo: 'Team Information', groupInfo: 'Team Information',
airInfo: 'Flight information', airInfo: 'Flight information',
tmp: 'tentative', tmp: 'tentative',
airSeatInfo: 'Location information', airSeatInfo: 'Seat lnformation',
YSeat: 'Economy Class', YSeat: 'Economy Class',
unUseNum: 'Remaining', unUseNum: 'Seat Availability',
CSeat: 'Business Class', CSeat: 'Business Class',
FSeat: 'First Class', FSeat: 'First Class',
priceInfo: 'Price information', priceInfo: 'Price information',
midPrice: 'Center Price', midPrice: 'Consortium Price',
BabyChargePrice: "Children's Surcharge", BabyChargePrice: "Children's Surcharge",
OldManChargePrice: 'Elderly Surcharge', OldManChargePrice: 'Elderly Surcharge',
VisaPrice: 'Visa', VisaPrice: 'Visa',
SingleRoomPrice: 'Single room price difference', SingleRoomPrice: 'Single Supplement',
OtherPrice: 'Miscellaneous fees', OtherPrice: 'Other',
buy: 'Place an order', buy: 'Booking',
payOrder: 'Charter flight settlement', payOrder: 'Settlement',
noData: 'There is currently no data available', noData: 'There is currently no data available',
ContactNamePay: 'Partner', ContactNamePay: 'Partner',
EntGuestNum: 'Number of people on the list', EntGuestNum: 'Name List Receive',
GuestNum: 'Total number of registrations', GuestNum: 'Total Registration',
PreferPricePay: 'Total amount receivable', PreferPricePay: 'Total amount receivable',
Refund: 'Refund amount', Refund: 'Refund amount',
PlatformTax: 'Platform Tax', PlatformTax: 'Platform Tax',
Income: 'Received', Income: 'Receive',
ZaiTuMoney: 'In transit amount', ZaiTuMoney: 'In transit amount',
DiscountMoney: 'Discount amount', DiscountMoney: 'Discount amount',
RedEnvelopeMoney: 'Deduction amount for large red envelopes', RedEnvelopeMoney: 'Deduction amount for large red envelopes',
...@@ -449,10 +483,10 @@ export default { ...@@ -449,10 +483,10 @@ export default {
notaccess: 'Do you have any interbank member accounts?', notaccess: 'Do you have any interbank member accounts?',
registerlink: 'Apply for registration', registerlink: 'Apply for registration',
title: 'Login', title: 'Login',
subTitle: 'Welcome to our store and start our urgent procurement.', subTitle: '',//'Welcome to our store and start our urgent procurement.',
account: 'Account (EMail/Unified Editor)', account: 'ID',
password: 'Password', password: 'Password',
forgot: 'Forgot password?', forgot: 'Forget Password?',
signin: 'Login', signin: 'Login',
pageTitle: 'Login', pageTitle: 'Login',
ruleTipsAccount: 'Please fill in the correct account', ruleTipsAccount: 'Please fill in the correct account',
...@@ -513,7 +547,7 @@ export default { ...@@ -513,7 +547,7 @@ export default {
dindanbaojia: 'Hotel order quotation', dindanbaojia: 'Hotel order quotation',
zhutuanhao: 'Group number', zhutuanhao: 'Group number',
lianxiren: 'Contact person', lianxiren: 'Contact person',
dindanhao: 'Order number', dindanhao: 'Booking Number',
riqi: 'Date', riqi: 'Date',
HotelDate: 'check-in time', HotelDate: 'check-in time',
HotelName: 'Hotel name', HotelName: 'Hotel name',
...@@ -799,7 +833,7 @@ export default { ...@@ -799,7 +833,7 @@ export default {
baojiaqueren: 'Is the quotation not confirmed immediately?', baojiaqueren: 'Is the quotation not confirmed immediately?',
jiagejihua: 'Price plan name', jiagejihua: 'Price plan name',
lutiankefang: 'Outdoor Guestroom', lutiankefang: 'Outdoor Guestroom',
ordermount: 'Total order amount', ordermount: 'Total Amount',
renmingbi: 'RMB', renmingbi: 'RMB',
youhui: 'Discount', youhui: 'Discount',
shifu: 'Actual payment', shifu: 'Actual payment',
...@@ -870,7 +904,7 @@ export default { ...@@ -870,7 +904,7 @@ export default {
shiyong: 'Using', shiyong: 'Using',
youxiaoqi: 'Validity period', youxiaoqi: 'Validity period',
notiaojian: 'This coupon does not meet the usage requirements!', notiaojian: 'This coupon does not meet the usage requirements!',
dindanhao: 'Order number', dindanhao: 'Booking Number',
}, },
scatteredOrderList: { scatteredOrderList: {
state1: 'To be paid', state1: 'To be paid',
...@@ -878,7 +912,7 @@ export default { ...@@ -878,7 +912,7 @@ export default {
state3: 'Canceled', state3: 'Canceled',
first: 'Hotel name', first: 'Hotel name',
table1: 'Hotel Name', table1: 'Hotel Name',
table2: 'Order Number', table2: 'Booking Number',
table3: 'Number of rooms', table3: 'Number of rooms',
table4: 'Total amount', table4: 'Total amount',
table5: 'Actual payment', table5: 'Actual payment',
...@@ -973,7 +1007,7 @@ export default { ...@@ -973,7 +1007,7 @@ export default {
rtc: 'Non consumption can be refunded at any time, partial refund is not supported for multiple ticket orders', rtc: 'Non consumption can be refunded at any time, partial refund is not supported for multiple ticket orders',
ms: 'Ticket booking details', ms: 'Ticket booking details',
nt: 'No ticket selected', nt: 'No ticket selected',
ds: 'Total order amount', ds: 'Total Amount',
sb: 'Submit Order', sb: 'Submit Order',
or: 'Order remarks', or: 'Order remarks',
zqa: 'Self pickup address', zqa: 'Self pickup address',
...@@ -1158,9 +1192,9 @@ export default { ...@@ -1158,9 +1192,9 @@ export default {
c11: 'Flight number', c11: 'Flight number',
c12: 'Flight arrival time', c12: 'Flight arrival time',
c13: 'Flight departure time', c13: 'Flight departure time',
c14: 'Number of adults', c14: 'Adult',
c15: 'Number of children', c15: 'Child',
c16: 'Number of infants', c16: 'Infant',
c17: 'Number of hand luggage', c17: 'Number of hand luggage',
c18: 'Number of running bags', c18: 'Number of running bags',
c19: 'Product name', c19: 'Product name',
......
...@@ -428,7 +428,7 @@ export default { ...@@ -428,7 +428,7 @@ export default {
SingleRoomPrice: 'Harga kamar single', SingleRoomPrice: 'Harga kamar single',
OtherPrice: 'Biaya lain-lain', OtherPrice: 'Biaya lain-lain',
buy: 'Pesan', buy: 'Pesan',
payOrder: 'Penyelesaian penerbangan charter', payOrder: 'Keselesaian komisi',
noData: 'Belum ada data', noData: 'Belum ada data',
ContactNamePay: 'Mitra', ContactNamePay: 'Mitra',
EntGuestNum: 'Jumlah orang dalam daftar', EntGuestNum: 'Jumlah orang dalam daftar',
......
import enUS from './en-US' import enUS from './en-US'
import zhTW from './zh-TW' import zhTW from './zh-TW'
import zhSW from './zh-SW' import zhSW from './zh-SW'
import koHG from './ko-HG' // import koHG from './ko-HG'
import jaRB from './ja-RB' import jaRB from './ja-RB'
import inID from './in-ID' // import inID from './in-ID'
export default { export default {
enUS, enUS,
zhTW, zhTW,
zhSW, zhSW,
koHG, //koHG,
jaRB, jaRB,
inID //inID
} }
...@@ -361,9 +361,20 @@ export default { ...@@ -361,9 +361,20 @@ export default {
second: 'PAK 団', second: 'PAK 団',
three: 'PAK オーダー', three: 'PAK オーダー',
four: 'PAK 決済', four: 'PAK 決済',
},
notice: {
first: 'お知らせ',
second: 'リスト',
} }
}, },
travel: { travel: {
status:{
normal:'すべて',
regular:'正常',
reserve:'占位',
waiting:'候補',
cancel:'取消'
},
start:'出発', start:'出発',
download:'行程をダウンロード', download:'行程をダウンロード',
returnMoney:'現在の返佣金額', returnMoney:'現在の返佣金額',
...@@ -430,7 +441,7 @@ export default { ...@@ -430,7 +441,7 @@ export default {
SingleRoomPrice: 'シングルルーム差額', SingleRoomPrice: 'シングルルーム差額',
OtherPrice: '雑費', OtherPrice: '雑費',
buy: '注文する', buy: '注文する',
payOrder: 'チャーターチェックアウト', payOrder: '佣金結算',
noData: 'データなし', noData: 'データなし',
ContactNamePay: 'パートナー', ContactNamePay: 'パートナー',
EntGuestNum: 'リストの人数', EntGuestNum: 'リストの人数',
......
...@@ -364,6 +364,13 @@ export default { ...@@ -364,6 +364,13 @@ export default {
} }
}, },
travel: { travel: {
status:{
normal:'전체',
regular:'정상',
reserve:'예약',
waiting:'대기',
cancel:'취소'
},
start:'출발', start:'출발',
download:'여정 다운로드', download:'여정 다운로드',
returnMoney:'현재 반환 금액', returnMoney:'현재 반환 금액',
...@@ -430,7 +437,7 @@ export default { ...@@ -430,7 +437,7 @@ export default {
SingleRoomPrice: '싱글 룸 차이', SingleRoomPrice: '싱글 룸 차이',
OtherPrice: '기타 비용', OtherPrice: '기타 비용',
buy: '주문하기', buy: '주문하기',
payOrder: '전세 체크아웃', payOrder: '커미션 결제',
noData: '전세 체크아웃', noData: '전세 체크아웃',
ContactNamePay: '파트너', ContactNamePay: '파트너',
EntGuestNum: '목록에 있는 사람 수', EntGuestNum: '목록에 있는 사람 수',
......
...@@ -361,9 +361,20 @@ export default { ...@@ -361,9 +361,20 @@ export default {
second: 'PAK团表', second: 'PAK团表',
three: 'PAK订单', three: 'PAK订单',
four: 'PAK結算', four: 'PAK結算',
},
notice: {
first: '公告栏',
second: '列表',
} }
}, },
travel: { travel: {
status:{
normal:'全部',
regular:'正常',
reserve:'占位',
waiting:'候补',
cancel:'取消'
},
start:'出发', start:'出发',
download:'下载行程', download:'下载行程',
returnMoney:'当前返佣金額', returnMoney:'当前返佣金額',
...@@ -430,7 +441,7 @@ export default { ...@@ -430,7 +441,7 @@ export default {
SingleRoomPrice: '单房差', SingleRoomPrice: '单房差',
OtherPrice: '杂费', OtherPrice: '杂费',
buy: '下单', buy: '下单',
payOrder: '包机结算', payOrder: '佣金结算',
noData: '暂无数据', noData: '暂无数据',
ContactNamePay: '合作伙伴', ContactNamePay: '合作伙伴',
EntGuestNum: '已入名单人数', EntGuestNum: '已入名单人数',
......
...@@ -361,9 +361,24 @@ export default { ...@@ -361,9 +361,24 @@ export default {
second: 'PAK团表', second: 'PAK团表',
three: 'PAK订单', three: 'PAK订单',
four: 'PAK結算', four: 'PAK結算',
},
notice: {
first: '公告欄',
second: '列表',
} }
}, },
notice: {
pageTitle: '公告欄',
},
travel: { travel: {
status:{
normal:'全部',
regular:'正常',
reserve:'占位',
waiting:'候補',
cancel:'取消'
},
start:'出發', start:'出發',
download:'下載行程', download:'下載行程',
returnMoney:'当前返佣金額', returnMoney:'当前返佣金額',
...@@ -430,7 +445,7 @@ export default { ...@@ -430,7 +445,7 @@ export default {
SingleRoomPrice: '單房差', SingleRoomPrice: '單房差',
OtherPrice: '雜費', OtherPrice: '雜費',
buy: '下單', buy: '下單',
payOrder: '包機結算', payOrder: '佣金结算',
noData: '暫無數據', noData: '暫無數據',
ContactNamePay: '合作夥伴', ContactNamePay: '合作夥伴',
EntGuestNum: '已入名單人數', EntGuestNum: '已入名單人數',
......
...@@ -10,37 +10,22 @@ ...@@ -10,37 +10,22 @@
<div class="mobile-only q-ml-md text-dark text-h6 text-weight-bold">PIC</div> <div class="mobile-only q-ml-md text-dark text-h6 text-weight-bold">PIC</div>
<div class="mls text-h6 text-dark desktop-only">{{ childPageTitle }}</div> <div class="mls text-h6 text-dark desktop-only">{{ childPageTitle }}</div>
</div> </div>
<div <div class="bg-grey-2 rounded-borders q-px-md f12 text-grey-800 q-mr-md desktop-only">
class="bg-grey-2 rounded-borders q-px-md f12 text-grey-800 q-mr-md desktop-only"
>
{{ version }} {{ version }}
</div> </div>
<div class="rounded-borders header-item q-mr-lg"> <div class="rounded-borders header-item q-mr-lg">
<svg-icon <svg-icon color="grey" icon="design/component.svg" :size="25" :tips="$t('syslog')"></svg-icon>
color="grey"
icon="design/component.svg"
:size="25"
:tips="$t('syslog')"
></svg-icon>
</div> </div>
<div class="rounded-borders header-item q-mr-lg" style="position: right"> <div class="rounded-borders header-item q-mr-lg" style="position: right">
<div v-if="isDadge" class="header-badge bg-green-4"></div> <div v-if="isDadge" class="header-badge bg-green-4"></div>
<svg-icon <svg-icon color="grey" icon="Communication/Chat6.svg" :size="25" :tips="$t('sysmsg')"> </svg-icon>
color="grey"
icon="Communication/Chat6.svg"
:size="25"
:tips="$t('sysmsg')"
>
</svg-icon>
<q-popup-proxy :offset="[0, 15]" class="no-shadow"> <q-popup-proxy :offset="[0, 15]" class="no-shadow">
<Notifications :user="userInfo"></Notifications> <Notifications :user="userInfo"></Notifications>
</q-popup-proxy> </q-popup-proxy>
</div> </div>
<q-avatar size="40px" rounded class="bg-blue-2 cursor-pointer"> <q-avatar size="40px" rounded class="bg-blue-2 cursor-pointer">
<q-img :src="userInfo.photo" v-if="userInfo?.photo" mode="cover" /> <q-img :src="userInfo.photo" v-if="userInfo?.photo" mode="cover" />
<span class="text-primary text-h6" v-else>{{ <span class="text-primary text-h6" v-else>{{ userInfo.name?.substring(0, 1) }}</span>
userInfo.name?.substring(0, 1)
}}</span>
<q-popup-proxy :offset="[0, 15]" class="no-shadow"> <q-popup-proxy :offset="[0, 15]" class="no-shadow">
<user-info :user="userInfo"></user-info> <user-info :user="userInfo"></user-info>
</q-popup-proxy> </q-popup-proxy>
...@@ -49,47 +34,26 @@ ...@@ -49,47 +34,26 @@
</q-toolbar> </q-toolbar>
</q-header> </q-header>
<q-drawer <q-drawer show-if-above v-model="leftDrawerOpen" style="background: #1e1e2d; width: 265px" side="left"
show-if-above class="column">
v-model="leftDrawerOpen" <div class="column items-center q-mt-sm" style="color: #fff;zoom: .5;">
style="background: #1e1e2d; width: 265px" <img src="../assets/img/newLogo.jpg" style="height: 80px; filter: brightness(0) invert(1);">
side="left" <!-- <div style="width: 50px; overflow: hidden">
class="column" <img v-if="isDomainName_PIC" src="../assets/images/jvs-log.png" style="height: 40px" />
> <img v-else src="http://imgfile.oytour.com/Upload/WebSite/202303170746500900000000054.png" style="height: 40px" />
<div </div>
style="box-sizing: border-box; height: 66px; border-bottom: 1px dashed #444" <div class="text-h6 text-weight-bold" style="font-family: math">PEACE INTERNATIONAL</div>
class="row items-center q-px-md desktop-only" <div class="text-body2 text-weight-thin text-italic" style="font-family: math">by MILLENNIUM</div> -->
>
<img
v-if="isDomainName_PIC"
src="../assets/images/pic-log.png"
alt=""
style="height: 30px"
/>
<img
v-else
src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1679454107000_656.png"
alt=""
style="height: 30px"
/>
<!-- <div class="text-white text-weight-bold text-subtitle1 q-ml-md">{{ $t('siteName') }}</div> -->
</div> </div>
<q-scroll-area <q-scroll-area :thumb-style="scrollStyle.thumbStyle" :bar-style="scrollStyle.barStyle"
:thumb-style="scrollStyle.thumbStyle" class="col nav-list q-pl-lg">
:bar-style="scrollStyle.barStyle"
class="col nav-list q-pl-lg"
>
<navs></navs> <navs></navs>
</q-scroll-area> </q-scroll-area>
</q-drawer> </q-drawer>
<q-page-container class="window-height" id="scrollId"> <q-page-container class="window-height" id="scrollId">
<q-scroll-area <q-scroll-area ref="scrollAreaRef" :thumb-style="scrollStyle.thumbStyle" :bar-style="scrollStyle.barStyle"
ref="scrollAreaRef" class="full-height">
:thumb-style="scrollStyle.thumbStyle"
:bar-style="scrollStyle.barStyle"
class="full-height"
>
<router-view /> <router-view />
</q-scroll-area> </q-scroll-area>
</q-page-container> </q-page-container>
...@@ -102,120 +66,180 @@ ...@@ -102,120 +66,180 @@
</q-toolbar> </q-toolbar>
</q-footer> --> </q-footer> -->
</q-layout> </q-layout>
<q-dialog class="no-padding" v-model="noticeDialogVisible" persistent>
<q-card flat class="q-pa-md column" style="width:60vw;min-width: 375px; height: 80vh;">
<div class="text-h6 text-weight-bold full-width text-center">
{{ noticeDialogData.Title }}
</div>
<div class="text-center" style="font-size: 12px; font-weight: 400;">
<span class="text-grey-500">{{ $t('notice.column.publisher') }}{{ noticeDialogData.UpdateName }}</span>
<span class="text-grey-500 q-ml-md">{{ $t('notice.column.releaseDate') }} {{ noticeDialogData.Notice_date }}</span>
</div>
<div style="overflow-y: auto;" class="text-body2 q-mt-md full-width col q-pa-md" v-html="noticeDialogData.Content"></div>
<div class="q-mt-md row items-center" v-if="fileList.length > 0">
<span class="text-grey-500">{{ $t('notice.detail.file') }}</span>
<q-btn v-for="(x,i) in fileList" dense :key="i" color="primary" flat unelevated :label="x.Name" @click="downloadFile(x)" />
</div>
<div class="q-mt-md text-right">
<q-btn color="primary" flat unelevated @click="noticeDialogVisible = false" :label="$t('close')" />
</div>
</q-card>
</q-dialog>
</template> </template>
<script lang="ts"> <script lang="ts">
import { import { inject, provide, reactive, ref, toRefs, onMounted, watch } from 'vue'
inject, import { getStoreGetter } from '../store/utils'
provide, import { UserGetter } from '../store/modules/user/getters'
reactive, import svgIcon from '../components/global/svg-icon.vue'
ref, import useScrollModule from '../module/scrollbar/scrollModule'
toRefs, import Navs from '../components/layout/navs.vue'
onMounted, import userInfo from '../components/layout/userInfo.vue'
computed, import Notifications from '../components/layout/Notifications.vue'
watch, import { DirtionmaryHelper } from '../config/dictionary'
nextTick, import { AppConfig } from 'src/config/app'
} from "vue"; import scheduledTripService from 'src/api/scheduledTrip'
import { getStoreGetter } from "../store/utils"; import Store from '../store'
import { UserGetter } from "../store/modules/user/getters"; import { ApiResult } from 'src/@types/enumHelper'
import svgIcon from "../components/global/svg-icon.vue"; import message from 'src/utils/message'
import useScrollModule from "../module/scrollbar/scrollModule"; import { useI18n } from 'vue-i18n'
import Navs from "../components/layout/navs.vue"; import NoticeService from 'src/api/notice'
import userInfo from "../components/layout/userInfo.vue";
import Notifications from "../components/layout/Notifications.vue";
import { DirtionmaryHelper } from "../config/dictionary";
import { env } from "process";
import { AppConfig } from "src/config/app";
import scheduledTripService from "src/api/scheduledTrip";
import Store from "../store";
import { ApiResult } from "src/@types/enumHelper";
import message from "src/utils/message";
export default { export default {
components: { svgIcon, Navs, userInfo, Notifications }, components: { svgIcon, Navs, userInfo, Notifications },
setup() { setup() {
const leftDrawerOpen = ref(false); const leftDrawerOpen = ref(false)
const noticeDialogVisible = ref(false)
const noticeDialogData = ref<any>(null)
const fileList = ref<any[]>([])
const data = reactive({ const data = reactive({
userInfo: {} as any, userInfo: {} as any,
leftDrawerOpen: false, leftDrawerOpen: false,
scrollStyle: {} as any, scrollStyle: {} as any,
timer: 0, timer: 0,
isDadge: true, isDadge: true,
version: "", version: '',
isDomainName_PIC: true, isDomainName_PIC: true
}); })
const { t } = useI18n()
const downloadFile = async (file: any) => {
const url = 'http://imgfile.oytour.com/'+file.Url
try {
const response = await fetch(url)
const blob = await response.blob()
const filename = url.split('/').pop() || 'download'
const link = document.createElement('a')
link.href = window.URL.createObjectURL(blob)
link.download = filename
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
window.URL.revokeObjectURL(link.href)
} catch (error) {
//message.errorMsg(t('downloadFailed'))
}
}
// 根据域名渲染logo // 根据域名渲染logo
data.isDomainName_PIC = inject(DirtionmaryHelper.DOMAIN_NAME); data.isDomainName_PIC = inject(DirtionmaryHelper.DOMAIN_NAME)
const childPageTitle = ref("");
provide(DirtionmaryHelper.PAGE_TITLE_KEY, childPageTitle);
const activeMenu = ref(0);
provide(DirtionmaryHelper.MENU_KEYS, activeMenu);
data.userInfo = getStoreGetter<UserGetter>("user", "getUser");
data.scrollStyle = useScrollModule().scrollStyle; const childPageTitle = ref('')
provide(DirtionmaryHelper.NOTICE_DIALOG_DATA, noticeDialogData)
provide(DirtionmaryHelper.PAGE_TITLE_KEY, childPageTitle)
const activeMenu = ref(0)
provide(DirtionmaryHelper.MENU_KEYS, activeMenu)
data.userInfo = getStoreGetter<UserGetter>('user', 'getUser')
data.scrollStyle = useScrollModule().scrollStyle
const scrollAreaRef = ref(); const scrollAreaRef = ref()
const scrollArea = reactive({ const scrollArea = reactive({
pagesTop: 0, pagesTop: 0
}); })
// 储存滚动位置 // 储存滚动位置
provide(DirtionmaryHelper.SCROLL_AREA_OBJ, scrollArea); provide(DirtionmaryHelper.SCROLL_AREA_OBJ, scrollArea)
watch( watch(
() => scrollArea.pagesTop, () => scrollArea.pagesTop,
(n, o) => { (n, o) => {
scrollAreaRef.value.setScrollPosition("vertical", n, 100); scrollAreaRef.value.setScrollPosition('vertical', n, 100)
} }
); )
watch(
() => noticeDialogData.value,
(n, o) => {
console.log(n)
noticeDialogVisible.value = (noticeDialogData.value && noticeDialogData.value?.Id > 0)
console.log(noticeDialogVisible.value)
if(noticeDialogData.value?.File_url){
fileList.value = JSON.parse(noticeDialogData.value?.File_url)
}else{
fileList.value = []
}
},
{ immediate: true, deep: true }
)
const methods = { const methods = {
toggleLeftDrawer() { toggleLeftDrawer() {
data.leftDrawerOpen = !data.leftDrawerOpen; data.leftDrawerOpen = !data.leftDrawerOpen
}, },
//获取网站配置数据 //获取网站配置数据
getConfigData() { getConfigData() {
scheduledTripService scheduledTripService
.GetWebSiteConfig({ .GetWebSiteConfig({
RB_Group_Id: Store.state.user?.userDetail?.groupId, RB_Group_Id: Store.state.user?.userDetail?.groupId,
B2BDomain: Store.state.user?.userDetail?.name, B2BDomain: Store.state.user?.userDetail?.name
}) })
.then((r) => { .then(r => {
if (r.data.resultCode == ApiResult.SUCCESS) { if (r.data.resultCode == ApiResult.SUCCESS) {
if (r.data.data) { if (r.data.data) {
var jsonData = JSON.stringify(r.data.data); var jsonData = JSON.stringify(r.data.data)
localStorage.setItem("baseifo", jsonData); localStorage.setItem('baseifo', jsonData)
} }
} else { } else {
message.errorMsg(r.data.message); message.errorMsg(r.data.message)
} }
}) })
.catch((e) => { .catch(e => {
message.errorMsg(e.message); message.errorMsg(e.message)
}); })
}, }
}; }
const getNoticeList = async () => {
// @TODO 获取公告列表
// const res = await NoticeService.getNoticeList({
// pageIndex: 1,
// pageSize: 100,
// Title: '',
// StartDate: '',
// EndDate: '',
// status: 1
// })
// console.log(res)
}
onMounted(() => { onMounted(() => {
if (!localStorage.getItem("baseifo")) { if (!localStorage.getItem('baseifo')) {
methods.getConfigData(); methods.getConfigData()
} }
setInterval(() => { setInterval(() => {
data.isDadge = false; data.isDadge = false
setTimeout(() => { setTimeout(() => {
data.isDadge = true; data.isDadge = true
}, 200); }, 200)
}, 1000); }, 1000)
}); })
data.version = AppConfig.$version ?? ""; data.version = AppConfig.$version ?? ''
return { return {
...toRefs(data), ...toRefs(data),
...methods, ...methods,
childPageTitle, childPageTitle,
scrollAreaRef, scrollAreaRef,
scrollArea, scrollArea,
}; noticeDialogVisible,
}, noticeDialogData,
}; downloadFile,
fileList
}
}
}
</script> </script>
<style> <style>
.header-item { .header-item {
...@@ -226,17 +250,21 @@ export default { ...@@ -226,17 +250,21 @@ export default {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.header-item svg g [fill] { .header-item svg g [fill] {
fill: rgb(161, 165, 183) !important; fill: rgb(161, 165, 183) !important;
cursor: pointer; cursor: pointer;
padding: 4px; padding: 4px;
} }
.header-item:hover { .header-item:hover {
background: rgba(0, 0, 0, 0.05); background: rgba(0, 0, 0, 0.05);
} }
.header-item:hover svg g [fill] { .header-item:hover svg g [fill] {
fill: var(--q-primary) !important; fill: var(--q-primary) !important;
} }
.header-badge { .header-badge {
width: 6px; width: 6px;
height: 6px; height: 6px;
......
...@@ -171,7 +171,7 @@ export default defineComponent({ ...@@ -171,7 +171,7 @@ export default defineComponent({
getLanguage(val: SitLang) { getLanguage(val: SitLang) {
locale.value = val.langLocale ?? ""; locale.value = val.langLocale ?? "";
localStorage.setItem("lanuage", val.langLocale ?? ""); localStorage.setItem("lanuage2", val.langLocale ?? "");
}, },
}; };
......
...@@ -2,12 +2,17 @@ ...@@ -2,12 +2,17 @@
<div class="row full-height"> <div class="row full-height">
<div class="col q-pa-xl fit row justify-center height"> <div class="col q-pa-xl fit row justify-center height">
<div style="width:450px;" class="column justify-between content-between"> <div style="width:450px;" class="column justify-between content-between">
<div :class="{'row':$q.platform.is.desktop,'column':$q.platform.is.mobile}"> <div class='column items-center'>
<div class="col" :class="{'text-center q-mb-md':$q.platform.is.mobile}"> <!-- <div style="width:50px;overflow: hidden;">
<img v-if="isDomainName_PIC" src="../../assets/images/jvs-log.png" style="width:80%;" /> <img v-if="isDomainName_PIC" src="../../assets/images/jvs-log.png" style="height: 40px;" />
<img v-else src="http://imgfile.oytour.com/Upload/WebSite/202303170746500900000000054.png" style="width:80%;" /> <img v-else src="http://imgfile.oytour.com/Upload/WebSite/202303170746500900000000054.png" style="height: 40px;" />
</div> </div>
<div class="text-h6 text-weight-bold" style="font-family: math;" >PEACE INTERNATIONAL</div>
<div class="text-body2 text-weight-thin text-italic" style="font-family: math;" >by MILLENNIUM</div> -->
<img src="../../assets/img/newLogo.jpg" :style="{'height': $q.platform.is.mobile ? '100px' : '250px'}">
</div> </div>
<div class="q-py-xxl full-width"> <div class="q-py-xxl full-width">
<div class="text-h3 text-weight-bold">{{$t("login.title")}}</div> <div class="text-h3 text-weight-bold">{{$t("login.title")}}</div>
<div class="text-grey-6 q-mt-sm q-mb-lg">{{$t("login.subTitle")}}</div> <div class="text-grey-6 q-mt-sm q-mb-lg">{{$t("login.subTitle")}}</div>
...@@ -102,7 +107,7 @@ export default defineComponent({ ...@@ -102,7 +107,7 @@ export default defineComponent({
const getLanguage = (val:any) => { const getLanguage = (val:any) => {
locale.value = val.langLocale; locale.value = val.langLocale;
localStorage.setItem('lanuage', val.langLocale) localStorage.setItem('lanuage2', val.langLocale)
} }
return { userModel, usernameRef, passwordRef, userValidateRule, loginSubmit, dtNow, stateManager,getLanguage,...data} return { userModel, usernameRef, passwordRef, userValidateRule, loginSubmit, dtNow, stateManager,getLanguage,...data}
......
<template>
<div class="fix-height-subpage column no-wrap q-pa-md">
<div class="rounded-borders bg-white row items-center q-pa-md full-width">
<q-field :class="$q.platform.is.desktop ? '' : 'q-mb-md'" stack-label :label="$t('daterange')" standout
class="col-2" style="min-width: 190px" dense clearable v-model="dateRangeFormat" @clear="getFormat"
v-if="$q.platform.is.desktop">
<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="queryParams.Title" dense standout :label="$t('notice.search.title')"
:placeholder="$t('notice.placeholder.title')" v-if="$q.platform.is.desktop" />
<div class="col"></div>
<q-btn unelevated class="bg-grey-3 hover q-mr-md" :title="$t('morequery')" v-if="$q.platform.is.mobile">
<q-badge rounded class="din bg-red-2 text-red-14 text-weight-bold" floating :label="searchCnt"
v-if="searchCnt > 0" />
<svg-icon color="dark" icon="Text/Filter.svg" :tips="$t('morequery')" :size="20"></svg-icon>
<q-tooltip>{{ $t("morequery") }}</q-tooltip>
<q-popup-proxy class="no-shadow" style="box-shadow: 0 0 50px #ddd !important" :offset="[0, 20]"
:model-value="canHide">
<q-card class="q-pa-md rounded-borders" style="width: 300px">
<div class="q-mb-md text-subtitle2">{{ $t("morequery") }}</div>
<div class="q-my-md">
<q-field :class="$q.platform.is.desktop ? '' : 'q-mb-md'" stack-label :label="$t('daterange')" standout
class="col-2" style="min-width: 190px" dense clearable v-model="dateRangeFormat" @clear="getFormat">
<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>
</div>
<div class="q-my-md">
<q-input v-model="queryParams.Title" dense standout :label="$t('notice.search.title')"
:placeholder="$t('notice.placeholder.title')" />
</div>
</q-card>
</q-popup-proxy>
</q-btn>
<q-btn color="primary" unelevated :label="$t('query')" @click="setQueryHandler" />
</div>
<div class="q-pt-md col full-width" :style="{'overflow-y':$q.platform.is.mobile ? 'auto' : 'unset'}">
<q-table separator="cell" :grid="$q.platform.is.mobile" hide-bottom :rows="rows" :pagination="{rowsPerPage:100}" bordered :columns="$q.platform.is.mobile ? columnsMobile : columns" @row-click="rowClickHandler"
class="sticky-rightrowspan-column-table light-border col no-shadow full-height">
<template v-slot:body-cell-Action="props">
<q-td :props="props">
<q-btn color="primary" flat dense :label="$t('notice.view')" @click="viewHandler(props.row)" />
</q-td>
</template>
</q-table>
</div>
<q-pagination
class="full-width justify-end"
v-model="queryParams.pageIndex"
color="primary"
:max="queryParams.pageCount"
:input="true"
@update:model-value="changePageHandler"
/>
</div>
</template>
<script setup lang="ts">
import svgIcon from "../../components/global/svg-icon.vue";
import { computed, inject, reactive, ref } from "vue";
import useMetaModule from "../../module/meta/metaModule";
import { useI18n } from 'vue-i18n'
import { DirtionmaryHelper } from "src/config/dictionary";
import { date, useQuasar } from 'quasar'
import NoticeService from "src/api/notice";
import { ApiResult } from "src/@types/enumHelper";
const { setTitle } = useMetaModule();
const { t } = useI18n();
const q = useQuasar()
setTitle(t("notice.pageTitle"));
const pageTitle = inject(DirtionmaryHelper.PAGE_TITLE_KEY) as any
pageTitle.value = t("notice.pageTitle");
const dateRange = reactive({ from: '', to: '' })
const dateRangeFormat = ref(`${dateRange.from} - ${dateRange.to}`)
const noticeDialogData = inject(DirtionmaryHelper.NOTICE_DIALOG_DATA) as any
const qDateProxy = ref(null)
const queryParams = reactive({
StartDate: '',
EndDate: '',
Title: '',
Is_top: -1,
Status: 1,
pageIndex: 1,
pageSize: 10,
UpdateBy: -1,
total: 0,
pageCount: 0
})
const loading = ref(false)
const canHide = ref(false)
const rows = ref<any[]>([])
const columns = ref([
{ name: 'Title', label: t('notice.search.title'), align: 'left', field: 'Title' },
{ name: 'UpdateName', label: t('notice.column.publisher'), align: 'left', field: 'UpdateName' },
{ name: 'Notice_date', label: t('notice.column.releaseDate'), align: 'left', field: 'Notice_date' },
{ name: 'Action', label: t('notice.column.action'), align: 'left' },
])
const columnsMobile = ref([
{ name: 'Title', label: t('notice.search.title'), align: 'left', field: 'Title' },
{ name: 'UpdateName', label: t('notice.column.publisher'), align: 'left', field: 'UpdateName' },
{ name: 'Notice_date', label: t('notice.column.releaseDate'), align: 'left', field: 'Notice_date' }
])
const searchCnt = computed(() => {
let cnt = 0
if (queryParams.Title != '') cnt++
if (queryParams.StartDate != '') cnt++
if (queryParams.EndDate != '') cnt++
return cnt
})
const setQueryHandler = () => {
queryParams.pageIndex = 1
queryNoticeList()
}
const getFormat = () => {
if (!dateRangeFormat.value) {
queryParams.StartDate = ''
queryParams.EndDate = ''
}
}
const dateRangeHandler = (e: any) => {
queryParams.StartDate = `${e.from.year}/${e.from.month}/${e.from.day}`
queryParams.EndDate = `${e.to.year}/${e.to.month}/${e.to.day}`
dateRangeFormat.value = `${queryParams.StartDate} - ${queryParams.EndDate}`
if (qDateProxy.value) (qDateProxy.value as any).hide()
}
const optionsFn = (cd: any) => {
return cd >= date.formatDate(date.adjustDate(new Date(), { year: 2000, month: 1, days: 1 }), 'YYYY/MM/DD')
}
const changePageHandler = (n: number) => {
queryParams.pageIndex = n
console.log(queryParams,n)
queryNoticeList()
}
const queryNoticeList = async () => {
loading.value = true
rows.value = []
if(queryParams.pageIndex == 1){
queryParams.total = 0
queryParams.pageCount = 0
}
try {
const res = await NoticeService.getNoticeList(queryParams)
if (res.data.resultCode == ApiResult.SUCCESS) {
rows.value = res.data.data.pageData
queryParams.total = res.data.data.count
queryParams.pageCount = res.data.data.pageCount
}else {
rows.value = mockData().data.pageData
queryParams.total = mockData().data.count
queryParams.pageCount = mockData().data.pageCount
}
} catch (error) {
} finally {
loading.value = false
}
}
const mockData = () => {
return {
"resultCode": 1,
"message": "",
"data": {
"pageIndex": 1,
"pageSize": 15,
"count": 189,
"pageCount": 13,
"pageData": [
{
"Id": 243,
"Content": "<p class=\"ql-align-center\">\t<span class=\"ql-size-large\">关于规范日常付款流程的通知</span></p><p><span class=\"ql-size-large\">\t为进一步优化资金统筹管理,提高付款工作效率,现就日常付款流程规范如下:</span></p><p><span class=\"ql-size-large\">一、提报要求</span></p><p><span class=\"ql-size-large\">1. 提报时间:每日15:00前;</span></p><p><span class=\"ql-size-large\">2. 提报范围:流程到会计且确需当日支付的紧急款项;</span></p><p><span class=\"ql-size-large\">3. 提报内容:报销单号、付款金额(单据需递交财务部);</span></p><p><span class=\"ql-size-large\">4. 提报方式:通过企业微信提报-对接至单据审核会计;</span></p><p><span class=\"ql-size-large\">二、处理流程</span></p><p><span class=\"ql-size-large\">1. 会计人员每日15:30前完成汇总审核;</span></p><p><span class=\"ql-size-large\">2. 出纳根据当日资金存量按紧急程度安排付款;</span></p><p><span class=\"ql-size-large\">3. 非紧急款项纳入资金池滚动支付;</span></p><p><span class=\"ql-size-large\">三、注意事项</span></p><p><span class=\"ql-size-large\">1. 逾期提报将顺延至次工作日处理;</span></p><p><span class=\"ql-size-large\">2. 未标注\"加急\"字样的报销默认按常规流程处理;</span></p><p><span class=\"ql-size-large\">\t本通知自2025年04月09日起执行,请各部门严格把控报销审批时效性,共同维护公司资金运作效率,如有人不遵守规则后果自行承担。</span></p>",
"Count": 0,
"CreateBy": 400,
"CreateTime": "2025-04-11T18:27:56",
"File_url": null,
"Is_delete": 0,
"Is_top": 0,
"Notice_date": "2025-04-11 18:27:56",
"Status": 1,
"Title": "关于规范日常付款流程的通知",
"UpdateBy": 400,
"UpdateName": "何娟",
"UpdateTime": "2025-04-11 18:27:56"
},
{
"Id": 242,
"Content": "<p><span class=\"ql-size-large\"> 关于规范日常付款流程的通知</span></p><p><span class=\"ql-size-large\">为进一步优化资金统筹管理,提高付款工作效率,现就日常付款流程规范如下:</span></p><p><span class=\"ql-size-large\">一、提报要求</span></p><p><span class=\"ql-size-large\">1. 提报时间:每日15:00前;</span></p><p><span class=\"ql-size-large\">2. 提报范围:流程到会计且确需当日支付的紧急款项;</span></p><p><span class=\"ql-size-large\">3. 提报内容:报销单号、付款金额(单据需递交财务部);</span></p><p><span class=\"ql-size-large\">4. 提报方式:通过企业微信提报-对接至单据审核会计;</span></p><p><span class=\"ql-size-large\">二、处理流程</span></p><p><span class=\"ql-size-large\">1. 会计人员每日15:30前完成汇总审核;</span></p><p><span class=\"ql-size-large\">2. 出纳根据当日资金存量按紧急程度安排付款;</span></p><p><span class=\"ql-size-large\">3. 非紧急款项纳入资金池滚动支付;</span></p><p><span class=\"ql-size-large\">三、注意事项</span></p><p><span class=\"ql-size-large\">1. 逾期提报将顺延至次工作日处理;</span></p><p><span class=\"ql-size-large\">2. 未标注\"加急\"字样的报销默认按常规流程处理;</span></p><p><span class=\"ql-size-large\">本通知自2025年04月09日起执行,请各部门严格把控报销审批时效性,共同维护公司资金运作效率。</span></p>",
"Count": 0,
"CreateBy": 400,
"CreateTime": "2025-04-09T11:02:54",
"File_url": null,
"Is_delete": 0,
"Is_top": 0,
"Notice_date": "2025-04-09 11:02:54",
"Status": 1,
"Title": "关于规范日常付款流程的通知",
"UpdateBy": 400,
"UpdateName": "何娟",
"UpdateTime": "2025-04-09 11:02:54"
},
{
"Id": 241,
"Content": "<p class=\"ql-align-center\"><span class=\"ql-size-large\">关于2025年清明节放假的通知</span></p><p><span class=\"ql-size-large\">\t根据《国务院办公厅关于2025年部份假日安排的通知》,并结合公司实际情况与工作安排,现将清明放假相关事宜通知如下:</span></p><p><span class=\"ql-size-large\">一、放假时间:</span></p><p><span class=\"ql-size-large\">\t04月04日(周五)至04月6日(周日)放假,共3天。</span></p><p><span class=\"ql-size-large\">\t</span><span style=\"color: rgb(255, 0, 0);\" class=\"ql-size-large\">注:避免放假期间工作脱节,各部门人员自觉完成工作,如:销售检查团款是否收齐并已系统制单,操作部检查团账制单是否完成,旅游团是否跟进完成等,以上事宜请主管做好监督)。</span></p><p><span class=\"ql-size-large\">二、假期期间安排及注意事项</span></p><p><span class=\"ql-size-large\">(1)放假在即,请各位加油,努力收客。</span></p><p><span class=\"ql-size-large\">(2)放假前销售人员团款收齐至2025年04月07日出发团期。</span></p><p><span class=\"ql-size-large\">(3)假期期间,为保证业务不受影响,线上业务做到及时回复或处理,请全体人员保持通讯联络畅通(企业微信中有全体人员通讯录)。如遇紧急、重要事项或重大突发事件要立即向上级上报,并及时妥善处理。</span></p>",
"Count": 0,
"CreateBy": 400,
"CreateTime": "2025-04-02T17:48:16",
"File_url": null,
"Is_delete": 0,
"Is_top": 0,
"Notice_date": "2025-04-02 17:48:16",
"Status": 1,
"Title": "关于2025年清明节放假的通知",
"UpdateBy": 400,
"UpdateName": "何娟",
"UpdateTime": "2025-04-02 17:48:16"
},
{
"Id": 240,
"Content": "<p class=\"ql-align-center\"><strong class=\"ql-size-large\">印象之旅&nbsp;暑假业绩竞赛</strong></p><p><span class=\"ql-size-large\">一、参赛人员:成都公司全体销售。</span></p><p><span class=\"ql-size-large\">二、参赛线路:公司全线散拼。</span></p><p><span class=\"ql-size-large\">三、具体说明:</span></p><p><span class=\"ql-size-large\">1、比赛时间范围(按照出团日期):2025年6月1日~2025年8月31日。</span></p><p><span class=\"ql-size-large\">2、参赛订单需收机位订金。</span></p><p><span class=\"ql-size-large\">3、仅限散拼报名,按照人头计算(其中欧洲线每人按照2个人头计算,其他线路每人按照1个人头计算;签证、单机票、单酒店等所有单项产品不计算)。</span></p><p><span class=\"ql-size-large\">四、参赛人员分组情况:</span></p><p><span class=\"ql-size-large\">&nbsp;&nbsp;一组:周杨,赵江林,陆刚,邵玮,陈勇胜</span></p><p><span class=\"ql-size-large\">\t二组:魏俞婷,赵颖,谢燕,朱林,白京钟</span></p><p><span class=\"ql-size-large\">\t三组:唐萍,钟伟,李苹,付志豪</span></p><p><span class=\"ql-size-large\">\t四组:吴攀,邱磊,李军</span></p><p><span class=\"ql-size-large\">\t奖励方案:</span></p><p><span class=\"ql-size-large\">\t个人奖励方案(取前五名):</span></p><p><br></p>",
"Count": 0,
"CreateBy": 400,
"CreateTime": "2025-03-21T18:11:53",
"File_url": "[{\"Url\":\"/New/Upload/Notice/202503210611192510000000001.pdf\",\"Name\":\"成都业绩竞赛公告.pdf\",\"VideoPath\":null,\"FileType\":null}]",
"Is_delete": 0,
"Is_top": 0,
"Notice_date": "2025-03-21 18:11:53",
"Status": 1,
"Title": "印象之旅成都区域暑假业绩竞赛",
"UpdateBy": 400,
"UpdateName": "何娟",
"UpdateTime": "2025-03-21 18:11:53"
},
{
"Id": 239,
"Content": "<p class=\"ql-align-center\"><span class=\"ql-size-large\">关于旅小友推广会员的通知</span></p><p><span class=\"ql-size-large\">\t围绕“渠道深耕,精准获客”2025年同业转型通过“旅小友”小程序以会员体系为重点。2024年年度会议结束后,会员推广为公司全员重点工作,同时确保目标有效达成,在2025年2月7日周会中制定责任制度,具体如下:</span></p><p><span class=\"ql-size-large\">\t2025年同业销售转型责任额分拆如下:</span></p><p><span class=\"ql-size-large\">第一季度:每位销售每个月要完成100个以上的会员,三个月共计300个。</span></p><p><span class=\"ql-size-large\">第二季度:每位销售每个月要完成50个以上的会员,三个月共计150个。</span></p><p><span class=\"ql-size-large\">第三季度:每位销售每个月要完成20个以上会员,三个月共计60个。</span></p><p><span class=\"ql-size-large\">第四季度:每位销售每个月要完成10个以上会员,三个月共计40个。</span></p><p><span class=\"ql-size-large\">\t公司全员销售需按以上规定完成会员注册且激活,若任务目标未达成,则销售需按50元/个进行责任分担,补足所差会员数量(例:第一季度完成280个,差20个,则责任分担1000元)。</span></p><p><span class=\"ql-size-large\">\t组员未完成会员目标,组长存在监督不到位,也有不可推卸责任,给予1000元/人责任分担(例:组员4人,2人未完成,责任分担2000元)。</span></p><p><span class=\"ql-size-large\" style=\"color: rgb(230, 0, 0);\">\t2025年同业销售转型责任额,入职公司不足半年,任务量减半。</span></p><p><span class=\"ql-size-large\">\t以上规定请大家充分理解并严格执行!!</span></p>",
"Count": 0,
"CreateBy": 400,
"CreateTime": "2025-02-11T18:06:42",
"File_url": "[{\"Url\":\"/New/Upload/Notice/202502110606096610000000034.jpg\",\"Name\":\"关于旅小友推广会员的通知.jpg\",\"VideoPath\":null,\"FileType\":null}]",
"Is_delete": 0,
"Is_top": 0,
"Notice_date": "2025-02-11 18:06:42",
"Status": 1,
"Title": "关于旅小友推广会员的通知",
"UpdateBy": 400,
"UpdateName": "何娟",
"UpdateTime": "2025-02-11 18:06:42"
},
{
"Id": 238,
"Content": "<p class=\"ql-align-center\"><span class=\"ql-size-large\">关于2025年春节放假的通知</span></p><p><span class=\"ql-size-large\">\t2025年春节来临之际,根据《国务院办公厅关于2025年部份假日安排的通知》,并结合公司实际情况与工作安排,现将春节放假相关事宜通知如下:</span></p><p><span class=\"ql-size-large\">一、放假时间:</span></p><p><span class=\"ql-size-large\">\t01月27日(周一)至02月04日(周二)放假,共9天。</span></p><p><span class=\"ql-size-large\">\t01月25日-1月26日(周六、周天),02月08日(周六),正常上班。</span></p><p><span class=\"ql-size-large\">\t如有特殊原因需提前离开,可请年假。</span></p><p><span class=\"ql-size-large\">\t</span><span style=\"color: rgb(255, 0, 0);\" class=\"ql-size-large\">注:因春节放假时间较长,避免放假期间工作脱节,各部门人员自觉完成工作,如:销售检查团款是否收齐并已系统制单,操作部检查团账制单是否完成,旅游团是否跟进完成等,以上事宜请主管做好监督,如未完成,不允放假)。</span></p><p><span class=\"ql-size-large\">二、假期期间安排及注意事项</span></p><p><span class=\"ql-size-large\">(1)放假在即,收客不要松懈,且放假前团款需收齐至2025年02月13日出发团期;</span></p><p><span class=\"ql-size-large\">(2)假期期间,为保证业务不受影响,线上业务做到及时回复或处理,请全体人员保持通讯联络畅通(企业微信中有全体人员通讯录)。如遇紧急、重要事项或重大突发事件要立即向上级上报,并及时妥善处理。</span></p><p class=\"ql-align-justify\"><br></p><p class=\"ql-align-justify\"><strong class=\"ql-size-large\">祝大家新年快乐,心想事成,万事如意!!</strong></p><p><br></p>",
"Count": 0,
"CreateBy": 400,
"CreateTime": "2025-01-23T15:26:42",
"File_url": "[{\"Url\":\"/New/Upload/Notice/202501230326357830000000335.jpg\",\"Name\":\"关于2025年春节放假的通知.jpg\",\"VideoPath\":null,\"FileType\":null}]",
"Is_delete": 0,
"Is_top": 0,
"Notice_date": "2025-01-23 15:26:42",
"Status": 1,
"Title": "关于2025年春节放假的通知",
"UpdateBy": 400,
"UpdateName": "何娟",
"UpdateTime": "2025-01-23 15:26:42"
},
{
"Id": 237,
"Content": "<p class=\"ql-align-center\"><span class=\"ql-size-large\">关于提成年后发放的相关说明</span></p><p><span class=\"ql-size-large\">印象各位同仁:</span></p><p><span class=\"ql-size-large\">\t首先感谢大家这一年来工作中的努力付出,疫情三年以来,有各位的陪伴,公司才能一直坚持到2024年,迎来旅游业重新焕发生机。</span></p><p><span class=\"ql-size-large\">理想中的旅游井喷,现实中终归还是有所差距。疫情虽然已经过去,但出境游市场整体的恢复却不乐观。大家在销售第一线,相信对获客的艰难更有体会,而且旅游行业的机票、房、餐、车等环节,团队价格都较疫情前大幅上涨,导致出团运行成本大幅增加,但成团价格和成团数量都远远不能和疫情前相提并论,因此成团的利润率也极大的降低。</span></p><p><span class=\"ql-size-large\">\t春节在即,为了保证2025年各线路团队运营,公司在航空公司、团队出行团款开支上占用了较大金额的资金,所以2024年12月提成的发放时间,抱歉延后到节后才能发放,希望能得到各位的谅解与理解。</span></p><p><span class=\"ql-size-large\">\t如因个人资金确实困难者,可向部门主管提出,单独向公司预支费用!</span></p><p class=\"ql-align-justify\"><br></p><p class=\"ql-align-justify\"><strong class=\"ql-size-large\">祝大家新年快乐,心想事成,万事如意!!</strong></p><p><br></p>",
"Count": 0,
"CreateBy": 400,
"CreateTime": "2025-01-23T15:24:58",
"File_url": "[{\"Url\":\"/New/Upload/Notice/202501230324520750000000333.jpg\",\"Name\":\"关于提成年后发放的相关说明.jpg\",\"VideoPath\":null,\"FileType\":null}]",
"Is_delete": 0,
"Is_top": 0,
"Notice_date": "2025-01-23 15:24:58",
"Status": 1,
"Title": "关于提成年后发放的相关说明",
"UpdateBy": 400,
"UpdateName": "何娟",
"UpdateTime": "2025-01-23 15:24:58"
},
{
"Id": 236,
"Content": "<p class=\"ql-align-center\">\t<span class=\"ql-size-large\">关于办公室停电的通知</span></p><p><span class=\"ql-size-large\">\t接阳光新业物业通知,2025年01月07日阳光新业2栋,因配合供电局对10KV检修停电,现对停电做以下通知:</span></p><p><span class=\"ql-size-large\">\t(1)停电时间:2025年01月07日(周二)早上08:00-18:00点;</span></p><p><span class=\"ql-size-large\">\t(2)由于停电导致无法正常工作,公司根据实际情况作出安排,后勤部人员将进行居家办公,并通过后台ERP系统打卡(后台将记录登录时间以供考勤查询)。销售部的员工则需外出跑市场,并通过在门店拍照的方式进行考勤打卡。</span></p><p><span class=\"ql-size-large\">\t(3)请各部门提前做好工作安排,同时请保持电话通畅,方便联系(企业微信中通讯录)。</span></p>",
"Count": 0,
"CreateBy": 400,
"CreateTime": "2025-01-06T14:50:38",
"File_url": null,
"Is_delete": 0,
"Is_top": 0,
"Notice_date": "2025-01-06 14:50:38",
"Status": 1,
"Title": "关于办公室停电的通知",
"UpdateBy": 400,
"UpdateName": "何娟",
"UpdateTime": "2025-01-06 14:50:38"
},
{
"Id": 235,
"Content": "<p><span class=\"ql-size-large\">\t随着年末的临近,我们向您致以冬日的问候。在此,元旦佳节即将到来之际,依据《国务院办公厅关于2025年部分假日安排的通知》,并考虑到公司的实际情况与工作计划,现将有关放假的具体事宜通知如下:</span></p><p><span class=\"ql-size-large\">一、放假时间:</span></p><p><span class=\"ql-size-large\">\t2025年1月1日(周三)放假1天。</span></p><p><span class=\"ql-size-large\">\t</span><span style=\"color: rgb(255, 0, 0);\" class=\"ql-size-large\">注:日本领事馆将于新年期间放假,请密切关注团队签证的送签进度。</span></p><p><span class=\"ql-size-large\">二、假期期间安排及注意事项</span></p><p><span class=\"ql-size-large\">(1)春节放假在即,请各位加油,努力收客,同时注意款项的收取。</span></p><p><span class=\"ql-size-large\">(2)假期期间,为保证业务不受影响(部份部门请安排好调休工作),线上业务做到及时回复或处理,请全体人员保持通讯联络畅通(企业微信中有全体人员通讯录)。如遇紧急、重要事项或重大突发事件要立即向上级上报,并及时妥善处理。</span></p><p class=\"ql-align-center\"><strong class=\"ql-size-large\">祝大家新年快乐,财源广进,阖家幸福安康,万事如意顺心。</strong></p><p><br></p>",
"Count": 0,
"CreateBy": 400,
"CreateTime": "2024-12-30T15:29:31",
"File_url": null,
"Is_delete": 0,
"Is_top": 0,
"Notice_date": "2024-12-30 15:29:31",
"Status": 1,
"Title": "关于元旦节放假通知",
"UpdateBy": 400,
"UpdateName": "何娟",
"UpdateTime": "2024-12-30 15:29:31"
},
{
"Id": 234,
"Content": "<p class=\"ql-align-center\"><span class=\"ql-size-large\">关于旅游团定金收取的通知</span></p><p><span class=\"ql-size-large\">\t近期频繁出现旅游团,定金未收足情况,临近出发客人取消行程,导致机损严重,且无法认损。为了确保旅游行程正常安排,不影响旅客的体验和服务质量,我们特此通知关于旅游团定金的收取事宜如下:</span></p><p><span class=\"ql-size-large\">(1)收团时收定必须大于团费20%;</span></p><p><span class=\"ql-size-large\">(2)出发前一周需收完全款;</span></p><p><span class=\"ql-size-large\">(3)如出现旅客取消并产生损失,销售需按公司“</span><strong style=\"color: rgb(33, 33, 33);\" class=\"ql-size-large\">赔偿处罚规定”</strong><span class=\"ql-size-large\">执行。</span></p><p><img src=\"data:image/png;base64,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\"></p>",
"Count": 0,
"CreateBy": 400,
"CreateTime": "2024-11-12T17:45:13",
"File_url": "[{\"Url\":\"/New/Upload/Notice/202411120544522070000000127.jpg\",\"Name\":\"关于旅游团定金收取的通知.jpg\",\"VideoPath\":null,\"FileType\":null}]",
"Is_delete": 0,
"Is_top": 0,
"Notice_date": "2024-11-12 17:45:13",
"Status": 1,
"Title": "关于旅游团定金收取的通知",
"UpdateBy": 400,
"UpdateName": "何娟",
"UpdateTime": "2024-11-12 17:45:13"
},
{
"Id": 232,
"Content": "<p class=\"ql-align-center\"><span class=\"ql-size-large\">关于2024年中秋、国庆放假的通知</span></p><p><span class=\"ql-size-large\">\t根据《国务院办公厅关于2024年部份假日安排的通知》,并结合公司实际情况与工作安排,现将放假相关事宜通知如下:</span></p><p><span class=\"ql-size-large\">一、放假时间:</span></p><p><span class=\"ql-size-large\">\t中秋:09月15日(周天)至09月17日(周二)放假,共3天。</span></p><p><span class=\"ql-size-large\">\t国庆:10月1日(周二)至10月7日(周一)放假,共7天。</span></p><p><span class=\"ql-size-large\">\t09月14日(周六)正常上班;9月29日(周日);10月12日(星期六)正常上班。</span></p><p><span class=\"ql-size-large\">\t</span><span style=\"color: rgb(255, 0, 0);\" class=\"ql-size-large\">注:避免放假期间,团款催收遗漏,请各销售检查团款是否收齐并已系统制单)。</span></p><p><span class=\"ql-size-large\">二、假期期间安排及注意事项</span></p><p><span class=\"ql-size-large\">(1)放假在即,请各位加油,努力收客,放假前销售人员团款收齐至2024年09月18日出发团期。</span></p><p><span class=\"ql-size-large\">(2)假期期间,为保证业务不受影响(部份部门请安排好调休工作),线上业务做到及时回复或处理,请全体人员保持通讯联络畅通(企业微信中有全体人员通讯录)。如遇紧急、重要事项或重大突发事件要立即向上级上报,并及时妥善处理。</span></p><p class=\"ql-align-center\"><strong class=\"ql-size-large\">祝大家中秋快乐,阖家幸福安康,万事如意顺心。</strong></p><p><br></p>",
"Count": 0,
"CreateBy": 400,
"CreateTime": "2024-09-13T16:11:46",
"File_url": "[{\"Url\":\"/New/Upload/Notice/202409130411394020000000309.jpg\",\"Name\":\"关于2024年中秋、国庆放假的通知.jpg\",\"VideoPath\":null,\"FileType\":null}]",
"Is_delete": 0,
"Is_top": 0,
"Notice_date": "2024-09-13 16:11:46",
"Status": 1,
"Title": "关于2024年中秋、国庆放假的通知",
"UpdateBy": 400,
"UpdateName": "何娟",
"UpdateTime": "2024-09-13 16:11:46"
},
{
"Id": 231,
"Content": "<p class=\"ql-align-center\">\t关于郑州负责人处罚公告</p><p>\t<span class=\"ql-size-large\">现有郑州负责人张兆峰,于2024年8月14日至8月22日,负责人谢富强,于2024年8月22至08月26日,在没有办理任何请假手续的情况下,无故旷工(张兆峰6天,谢富强3天,未计入周末),该行为已严重违反了公司考勤规章管理制度,同时影响了郑州办事处机位事宜滞后。对于郑州负责人没有认真履行工作职责,导致工作效率低下。为严肃纪律,维护正常的工作秩序,确保公司考勤制度的实施,经研究决定,对郑州负责做以下处罚:</span></p><p><span class=\"ql-size-large\">\t1、张兆峰 计旷工6天,明知故犯,未向负责人清晰或准确告之回程时间,导致工作脱节,缺乏有效的交接机制,导致工作滞后,作为负责人未起到以身作责,性质恶劣,故加重处罚,给予旷工天数2倍的处理办法。</span></p><p><span class=\"ql-size-large\">\t2、谢富强 计旷工3天,明知故犯,未明确详细与负责人张兆峰交接并沟通工作到位,导致工作脱节,缺乏有效的交接机制,导致工作滞后,作为负责人之一,未起到良好的领头作用,故加重处罚,给予旷工天数的2倍处理办法。</span></p><p><span class=\"ql-size-large\">\t3、以上人员如再次出现类似问题,公司将给予解除劳动关系。</span></p><p><span class=\"ql-size-large\">&nbsp;&nbsp;</span><span style=\"color: rgb(230, 0, 0);\" class=\"ql-size-large\">&nbsp;望所有人员引以为戒,遵守公司管理制度,加强工作责任心。杜绝随意旷工、怠工等不良现象,如确有事,请提前告之并走请假流程。</span></p>",
"Count": 0,
"CreateBy": 400,
"CreateTime": "2024-08-27T12:10:35",
"File_url": "[{\"Url\":\"/New/Upload/Notice/202408271210294780000000050.jpg\",\"Name\":\"关于郑州负责人处罚公告.jpg\",\"VideoPath\":null,\"FileType\":null}]",
"Is_delete": 0,
"Is_top": 0,
"Notice_date": "2024-08-27 12:10:35",
"Status": 1,
"Title": "关于郑州负责人处罚公告",
"UpdateBy": 400,
"UpdateName": "何娟",
"UpdateTime": "2024-08-27 12:10:35"
},
{
"Id": 228,
"Content": "<p class=\"ql-align-center\">\t<span class=\"ql-size-large\">关于旅客滞留境外处罚公告</span></p><p class=\"ql-align-justify\"><span class=\"ql-size-large\">\t疫情结束后,恢复出境旅游,我司韩国线路陆续发生6人滞留事故,日本1人滞留事故,同时我司也受到领馆不同时长停签处罚,发生这样的事故,经查销售人员和对应签证审核人员工作均有失职,检查资料不够严谨,为了规范员工工作行为,提高员工责任意识,本次滞留旅客按200元/人,对相应人员进行处罚,以赔偿公司所遭受的部份经济损失。</span></p><p class=\"ql-align-justify\"><span class=\"ql-size-large\">\t此次事故责任人及赔偿金额如下:</span></p><p class=\"ql-align-justify\"><span class=\"ql-size-large\">\t销售部:(1)赵颖200元;钟伟400元(已在提成中扣除200元);斐倩600元,周杨200元。</span></p><p class=\"ql-align-justify\"><span class=\"ql-size-large\">\t签证部:(1)粱萍1200元;陈羚菲200元。</span></p><p class=\"ql-align-justify\"><span class=\"ql-size-large\">\t操作部:(1)肖红霞1200元,李瑶600。</span></p><p><span class=\"ql-size-large\">\t望所有同事引以为戒,如再次发生相关事故,则按2024-A-017发布《关于签证资料审核的通知》执行,(</span><span style=\"color: rgb(255, 0, 0);\" class=\"ql-size-large\">公司将给予相关销售和签证部审核人各罚款人民币1万元。出现滞留事故,相关人员还需承担公司签证外送费用</span><span class=\"ql-size-large\">)。</span></p><p><span class=\"ql-size-large\">\t另:公司考虑生活压力及对员工的关怀,本次赔偿同意斐倩,李瑶,分2个月从薪资中扣除,从 7月到 8 月,每月300 元,粱萍、肖红霞分3个月工资中扣除,从7月到10月,每月400元,赵颖,陈羚菲,钟伟3人在7月工资中扣除,行政部将处罚费用制单做入团成本,若该赔偿未完成前辞职,应一次性缴纳完赔偿金后办理手续。</span></p>",
"Count": 0,
"CreateBy": 400,
"CreateTime": "2024-08-05T15:30:40",
"File_url": "[{\"Url\":\"/New/Upload/Notice/202408050330238220000000072.pdf\",\"Name\":\"关于旅客滞留境外处罚公告.pdf\",\"VideoPath\":null,\"FileType\":null}]",
"Is_delete": 0,
"Is_top": 0,
"Notice_date": "2024-08-05 15:30:40",
"Status": 1,
"Title": "关于旅客滞留境外处罚公告",
"UpdateBy": 400,
"UpdateName": "何娟",
"UpdateTime": "2024-08-05 15:30:40"
},
{
"Id": 227,
"Content": "<p class=\"ql-align-center\">\t<span class=\"ql-size-large\">关于成都销售部新员工转正标准通知</span></p><p><span class=\"ql-size-large\">\t为考量试用期内新进人员实际工作能力,试用期更积极学习,发现其潜在能力,避免考核标准模糊不清。作为员工转正,劳动关系缔结或解除依据,就成都销售部试用转正考核制度公布如下:</span></p><p><span class=\"ql-size-large\">\t</span><span class=\"ql-size-large\" style=\"color: rgb(230, 0, 0);\">(1)试用期1-3个月,入职团队收客第一个月5人,第二个月10人,第三个月15人,合计30人(不限路线),如提前达成目标,可提前转正;</span></p><p><span class=\"ql-size-large\">\t(2)对于通过试用期转正员工,公司与签证正式的劳动合同,按正式员工享受公司一切福利待遇;</span></p><p><span class=\"ql-size-large\">\t(3)试用期3个月,考核者未达到收客标准,公司给予不予录用、或延期试用。</span></p><p><span class=\"ql-size-large\">\t(4)延期试用期时长为1-3个月,试用者针对未通过的因素进行改善,针对未完成任务作出努力;延期试用考核仍不通过者予以辞退。</span></p><p><span class=\"ql-size-large\">注:销售任务艰巨,请销售主管应对销售人员进行适度辅导,尽力使其胜任该岗位,同时请各部门协作。</span></p>",
"Count": 0,
"CreateBy": 400,
"CreateTime": "2024-07-29T17:18:25",
"File_url": "[{\"Url\":\"/New/Upload/Notice/202407290518048170000000272.jpg\",\"Name\":\"关于销售部新员工转正标准通知.jpg\",\"VideoPath\":null,\"FileType\":null}]",
"Is_delete": 0,
"Is_top": 0,
"Notice_date": "2024-07-29 17:18:25",
"Status": 1,
"Title": "关于成都销售部新员工转正标准通知",
"UpdateBy": 400,
"UpdateName": "何娟",
"UpdateTime": "2024-07-29 17:18:25"
},
{
"Id": 226,
"Content": "<p class=\"ql-align-center\"><span class=\"ql-size-large\">关于签证资料审核的通知</span></p><p><span class=\"ql-size-large\">\t2024年从1月至7月,韩国团3团陆续发生总计6人滞留事故,因此我社受到韩领馆的严重警告,并从2024年8月开始我社受到了韩国签证停签处罚。为尽早重新获得韩国送签权,以及韩国团队的正常操作,避免再次出现滞留事故,现就韩国团的相关操作再次重申以下规定:</span></p><p><span class=\"ql-size-large\">\t</span><span class=\"ql-size-large\" style=\"color: rgb(230, 0, 0);\">(1)对于整套签证资料严格审核,如通过企查查查询在职证明单位的真实性,或检查在职证明上公章真伪等;</span></p><p><span class=\"ql-size-large\" style=\"color: rgb(230, 0, 0);\">\t(2)旅客为东北三省,农村,乐山犍为等偏僻高危地区、单女、单男收件,全部需收取3万/人保证金费用;</span></p><p><span class=\"ql-size-large\">\t</span><span class=\"ql-size-large\" style=\"color: rgb(230, 0, 0);\">即日起公司任何路线,如再次发生相关事故,公司将给予相关销售和签证部审核人各罚款人民币1万元。出现滞留事故,相关人员还需承担公司签证外送费用。</span></p>",
"Count": 0,
"CreateBy": 400,
"CreateTime": "2024-07-29T15:32:57",
"File_url": "[{\"Url\":\"/New/Upload/Notice/202407290332547350000000184.jpg\",\"Name\":\"关于签证资料审核的通知.jpg\",\"VideoPath\":null,\"FileType\":null}]",
"Is_delete": 0,
"Is_top": 0,
"Notice_date": "2024-07-29 15:32:57",
"Status": 1,
"Title": "关于签证资料审核的通知",
"UpdateBy": 400,
"UpdateName": "何娟",
"UpdateTime": "2024-07-29 15:32:57"
}
]
},
"attach": null
}
}
const rowClickHandler = (evt:any, row:any, index:any) => {
console.log(row)
if(q.platform.is.mobile){
noticeDialogData.value = row
}
}
const viewHandler = (row: any) => {
noticeDialogData.value = row
}
queryNoticeList()
</script>
\ No newline at end of file
...@@ -97,12 +97,12 @@ ...@@ -97,12 +97,12 @@
<div class="col text-subtitle2 text-weight-bolder">{{ customerInfo.uniqueCode }}</div> <div class="col text-subtitle2 text-weight-bolder">{{ customerInfo.uniqueCode }}</div>
</div> </div>
</div> </div>
<div class="q-px-lg"> <!-- <div class="q-px-lg">
<div class="q-mt-lg row items-center"> <div class="q-mt-lg row items-center">
<div class="col-5 f12 text-grey-500">{{ $t('personal.LINEID') }}</div> <div class="col-5 f12 text-grey-500">{{ $t('personal.LINEID') }}</div>
<div class="col text-subtitle2 text-weight-bolder">{{ customerInfo.lineid}}</div> <div class="col text-subtitle2 text-weight-bolder">{{ customerInfo.lineid}}</div>
</div> </div>
</div> </div> -->
<div class="q-px-lg"> <div class="q-px-lg">
<div class="q-mt-lg row items-center"> <div class="q-mt-lg row items-center">
<div class="col-5 f12 text-grey-500">{{ $t('personal.Phone') }}</div> <div class="col-5 f12 text-grey-500">{{ $t('personal.Phone') }}</div>
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
</style> </style>
<template> <template>
<div class="q-pa-md"> <div class="q-pa-md">
<!-- <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-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-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> <div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div>
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
<q-btn color="primary" unelevated :label="$t('query')" @click="setQueryHandler"/> <q-btn color="primary" unelevated :label="$t('query')" @click="setQueryHandler"/>
</div> --> </div> -->
<!-- <div class="row"> <!-- <div class="row">
<div>合作伙伴:<span>{{item.ContactName}}</span></div> <div>合作伙伴:<span>{{item.ContactName}}</span></div>
<div>已入名单人数:<span>{{item.EntGuestNum}}</span></div> <div>已入名单人数:<span>{{item.EntGuestNum}}</span></div>
<div>已入名单人数:<span>{{item.IsHaveFinance}}</span></div> <div>已入名单人数:<span>{{item.IsHaveFinance}}</span></div>
...@@ -37,36 +37,46 @@ ...@@ -37,36 +37,46 @@
<div>代收总金额:<span>{{item.DueInMoney}}</span></div> <div>代收总金额:<span>{{item.DueInMoney}}</span></div>
<div>利润:<span>{{item.CommissionRate}}</span></div></div> <div>利润:<span>{{item.CommissionRate}}</span></div></div>
</div> --> </div> -->
<div class="row q-py-md"> <!-- <div class="row q-py-md full-width">
<div class="col-1">{{$t('travel.ContactNamePay')}}</div> <div class="col">{{$t('travel.ContactNamePay')}}</div>
<div class="col-1">{{$t('travel.EntGuestNum')}}</div> <div class="col">{{$t('travel.EntGuestNum')}}</div>
<div class="col-1">{{$t('travel.GuestNum')}}</div> <div class="col">{{$t('travel.GuestNum')}}</div>
<div class="col-1">{{$t('travel.PreferPricePay')}}</div> <div class="col">{{$t('travel.PreferPricePay')}}</div>
<div class="col-1">{{$t('travel.Refund')}}</div> <div class="col">{{$t('travel.Refund')}}</div>
<div class="col-1">{{$t('travel.PlatformTax')}}</div> <div class="col-1">{{$t('travel.PlatformTax')}}</div>
<div class="col-1">{{$t('travel.Income')}}</div> <div class="col">{{$t('travel.Income')}}</div>
<div class="col-1">{{$t('travel.ZaiTuMoney')}}</div> <div class="col-1">{{$t('travel.ZaiTuMoney')}}</div>
<div class="col-1">{{$t('travel.DiscountMoney')}}</div> <div class="col">{{$t('travel.DiscountMoney')}}</div>
<div class="col-1">{{$t('travel.RedEnvelopeMoney')}}</div> <div class="col-1">{{$t('travel.RedEnvelopeMoney')}}</div>
<div class="col-1">{{$t('travel.DueInMoney')}}</div> <div class="col-1">{{$t('travel.DueInMoney')}}</div>
<div class="col-1">{{$t('travel.CommissionRate')}}</div> <div class="col">{{$t('travel.CommissionRate')}}</div>
</div> </div>
<div class="row q-py-md" v-for="item in orders" :key="item.id"> <div class="row q-py-md full-width" v-for="item in orders" :key="item.id">
<div class="col-1"><span>{{item.ContactName}}</span></div> <div class="col"><span>{{item.ContactName}}</span></div>
<div class="col-1 text-center"><span>{{item.EntGuestNum}}</span></div> <div class="col text-center"><span>{{item.EntGuestNum}}</span></div>
<div class="col-1"><span>{{item.GuestNum}}</span></div> <div class="col"><span>{{item.GuestNum}}</span></div>
<div class="col-1"><span>{{item.PreferPrice}}</span></div> <div class="col"><span>{{item.PreferPrice}}</span></div>
<div class="col-1"><span>{{item.Refund}}</span></div> <div class="col"><span>{{item.Refund}}</span></div>
<div class="col-1"><span>{{item.PlatformTax}}</span></div> <div class="col-1"><span>{{item.PlatformTax}}</span></div>
<div class="col-1"><span>{{item.Income}}</span></div> <div class="col"><span>{{item.Income}}</span></div>
<div class="col-1"><span>{{item.ZaiTuMoney}}</span></div> <div class="col-1"><span>{{item.ZaiTuMoney}}</span></div>
<div class="col-1"><span>{{item.DiscountMoney}}</span></div> <div class="col"><span>{{item.DiscountMoney}}</span></div>
<div class="col-1"><span>{{item.RedEnvelopeMoney}}</span></div> <div class="col-1"><span>{{item.RedEnvelopeMoney}}</span></div>
<div class="col-1"><span>{{item.DueInMoney}}</span></div> <div class="col-1"><span>{{item.DueInMoney}}</span></div>
<div class="col-1"><span>{{item.CommissionRate}}</span></div> <div class="col"><span>{{item.CommissionRate}}</span></div>
</div> </div> -->
<div v-if="!orders.length" class="none">{{$t('travel.noData')}}</div> <!-- <div v-if="!orders.length" class="none">{{$t('travel.noData')}}</div> -->
<q-table
separator="cell"
:pagination="{ rowsPerPage: 100 }"
dense
:rows="orders"
bordered
:columns="cols"
class="sticky-rightrowspan-column-table light-border col no-shadow"
>
</q-table>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
...@@ -91,15 +101,25 @@ export default defineComponent({ ...@@ -91,15 +101,25 @@ export default defineComponent({
dateRange.to = date.formatDate(date.addToDate(new Date(), { days: 50 }), 'YYYY/MM/DD') 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') dateRange.from = date.formatDate(date.addToDate(new Date(), { days: 20 }), 'YYYY/MM/DD')
const dateRangeFormat = ref(`${dateRange.from} - ${dateRange.to}`) const dateRangeFormat = ref(`${dateRange.from} - ${dateRange.to}`)
const cols = ref([
{ name: 'ContactName', label: t('travel.ContactNamePay'), align: 'left', field: 'ContactName' },
{ name: 'EntGuestNum', label: t('travel.EntGuestNum'), align: 'left', field: 'EntGuestNum' },
{ name: 'GuestNum', label: t('travel.GuestNum'), align: 'left', field: 'GuestNum' },
{ name: 'PreferPrice', label: t('travel.PreferPricePay'), align: 'left', field: 'PreferPrice' },
{ name: 'Refund', label: t('travel.Refund'), align: 'left', field: 'Refund' },
{ name: 'Income', label: t('travel.Income'), align: 'left', field: 'Income' },
{ name: 'DiscountMoney', label: t('travel.DiscountMoney'), align: 'left', field: 'DiscountMoney' },
{ name: 'CommissionRate', label: t('travel.CommissionRate'), align: 'left', field: 'CommissionRate' },
])
const {query, params} = useRoute() const {query, params} = useRoute()
const search = { const search = {
TCID: query.id, TCID: query.id,
// GTeamName: '', // GTeamName: '',
// SelectEndDate: '', // SelectEndDate: '',
// SelectStartDate: '', // SelectStartDate: '',
} }
const data = reactive({ const data = reactive({
info: {}, info: {},
copyId: 0, copyId: 0,
showAddOrder: false, showAddOrder: false,
...@@ -157,7 +177,8 @@ export default defineComponent({ ...@@ -157,7 +177,8 @@ export default defineComponent({
...methods, ...methods,
search, search,
dateRangeFormat, dateRangeFormat,
dateRange dateRange,
cols
}; };
} }
}) })
......
...@@ -262,38 +262,40 @@ export default defineComponent({ ...@@ -262,38 +262,40 @@ export default defineComponent({
label: t("travel.startDate"), label: t("travel.startDate"),
align: "left", align: "left",
}, },
{ // {
name: "oldPeopleNum", // name: "oldPeopleNum",
field: "oldPeopleNum", // field: "oldPeopleNum",
label: t("travel.oldPeople"), // label: t("travel.oldPeople"),
align: "left", // align: "left",
}, // },
{ name: "manNum", field: "manNum", label: t("travel.man"), align: "left" }, { name: "manNum", field: "manNum", label: t("travel.man"), align: "left" },
{ name: "babyNum", field: "babyNum", label: t("travel.BabyNum"), align: "left" },
{ {
name: "chirdNum", name: "chirdNum",
field: "chirdNum", field: "chirdNum",
label: t("travel.children"), label: t("travel.children"),
align: "left", align: "left",
}, },
{ name: "babyNum", field: "babyNum", label: t("travel.BabyNum"), align: "left" },
{ {
name: "guestNum", name: "guestNum",
field: "guestNum", field: "guestNum",
label: t("travel.guestNum"), label: t("travel.guestNum"),
align: "left", align: "left",
}, },
{
name: "unit_Price",
field: "unit_Price",
label: t("travel.unit_Price"),
align: "left",
},
{ {
name: "tC_Price", name: "tC_Price",
field: "tC_Price", field: "tC_Price",
label: t("travel.tC_Price"), label: t("travel.tC_Price"),
align: "left", align: "left",
}, },
{
name: "unit_Price",
field: "unit_Price",
label: t("travel.unit_Price"),
align: "left",
},
{ {
name: "tradeWay", name: "tradeWay",
field: "tradeWay", field: "tradeWay",
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
参考 参考
http://dev.api.oytour.com/#/home/project/inside/api/detail?groupID=157&childGroupID=170&apiID=1010&projectName=REBORN&projectID=2 http://dev.api.oytour.com/#/home/project/inside/api/detail?groupID=157&childGroupID=170&apiID=1010&projectName=REBORN&projectID=2
--> -->
<div> <div>
<div class="rounded-borders bg-white row items-center q-pa-md"> <div class="rounded-borders bg-white row items-center q-pa-md">
...@@ -241,7 +241,13 @@ export default defineComponent({ ...@@ -241,7 +241,13 @@ export default defineComponent({
setup(props) { setup(props) {
const canHide = ref(false) const canHide = ref(false)
const { t } = useI18n(); const { t } = useI18n();
const orderStateList = ref([{ Name: t("travel.all"), Id: 0 }]); const orderStateList = ref([
{ Name: t("travel.status.normal"), Id: 0 },
{ Name: t("travel.status.regular"), Id: 1 },
{ Name: t("travel.status.reserve"), Id: 2 },
{ Name: t("travel.status.waiting"), Id: 3 },
{ Name: t("travel.status.cancel"), Id: 4 },
]);
const payStateList = reactive([ const payStateList = reactive([
{ label: t("travel.all"), value: -1 }, { label: t("travel.all"), value: -1 },
{ label: t("travel.notPay"), value: 1 }, { label: t("travel.notPay"), value: 1 },
...@@ -313,18 +319,18 @@ export default defineComponent({ ...@@ -313,18 +319,18 @@ export default defineComponent({
); );
}, },
initOrders() { initOrders() {
travelService // travelService
.getOrderStateList({}) // .getOrderStateList({})
.then((r) => { // .then((r) => {
if (r.data.resultCode == ApiResult.SUCCESS) { // if (r.data.resultCode == ApiResult.SUCCESS) {
orderStateList.value = orderStateList.value.concat(r.data.data); // orderStateList.value = orderStateList.value.concat(r.data.data);
} else { // } else {
message.errorMsg(r.data.message); // message.errorMsg(r.data.message);
} // }
}) // })
.catch((e) => { // .catch((e) => {
message.errorMsg(e.message); // message.errorMsg(e.message);
}); // });
}, },
}; };
methods.initOrders(); methods.initOrders();
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
" "
></q-input> ></q-input>
</div> </div>
<div class="col"> <!-- <div class="col">
<div class="title">{{ $t("travel.oldPeople") }}</div> <div class="title">{{ $t("travel.oldPeople") }}</div>
<q-input <q-input
v-model="addMsg.OldPeopleNum" v-model="addMsg.OldPeopleNum"
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
autoRemarks('OldPeopleNum', '老人人数'); autoRemarks('OldPeopleNum', '老人人数');
" "
></q-input> ></q-input>
</div> </div> -->
</div> </div>
<div class="row"> <div class="row">
<div class="col"> <div class="col">
......
<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-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 clearable v-model="dateRangeFormat" @clear="getFormat"> <template v-if="$q.platform.is.desktop">
<div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div> <q-field stack-label :label="$t('daterange')" standout
<q-popup-proxy :offset="[0, 10]" ref="qDateProxy"> class="col-2" style="min-width: 190px" dense clearable v-model="dateRangeFormat" @clear="getFormat">
<q-date v-model="dateRange" :options="optionsFn" range mask="YYYY/MM/DD" landscape <div class="self-center full-width no-outline" tabindex="0">{{ dateRangeFormat }}</div>
@range-end="dateRangeHandler"></q-date> <q-popup-proxy :offset="[0, 10]" ref="qDateProxy">
</q-popup-proxy> <q-date v-model="dateRange" :options="optionsFn" range mask="YYYY/MM/DD" landscape
</q-field> @range-end="dateRangeHandler"></q-date>
<q-input class="q-mr-md q-ml-md" v-model="search.TCID" dense standout :label="$t('travel.id')"/> </q-popup-proxy>
<q-input class="q-mr-md q-ml-md" v-model="search.StartAddress" dense standout :label="$t('travel.startCity')"/> </q-field>
<q-input class="q-mr-md q-ml-md" v-model="search.TCID" dense standout :label="$t('travel.id')" />
<q-input class="q-mr-md q-ml-md" v-model="search.StartAddress" dense standout :label="$t('travel.startCity')" />
</template>
<div class="col"></div> <div class="col"></div>
<q-btn color="primary" unelevated :label="$t('query')" @click="setQueryHandler"/> <q-btn unelevated class="bg-grey-3 hover q-mr-md" :title="$t('morequery')" v-if="$q.platform.is.mobile">
<q-badge rounded class="din bg-red-2 text-red-14 text-weight-bold" floating :label="searchCnt"
v-if="searchCnt > 0" />
<svg-icon color="dark" icon="Text/Filter.svg" :tips="$t('morequery')" :size="20"></svg-icon>
<q-tooltip>{{ $t("morequery") }}</q-tooltip>
<q-popup-proxy class="no-shadow" style="box-shadow: 0 0 50px #ddd !important" :offset="[0, 20]"
:model-value="canHide">
<q-card class="q-pa-md rounded-borders" style="width: 300px">
<div class="q-mb-md text-subtitle2">{{ $t("morequery") }}</div>
<div class="q-my-md">
<q-field stack-label :label="$t('daterange')" standout
class="col-2" style="min-width: 190px" dense clearable v-model="dateRangeFormat"
@clear="getFormat">
<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>
</div>
<div class="q-my-md">
<q-input class="q-mr-md q-ml-md" v-model="search.TCID" dense standout :label="$t('travel.id')" />
</div>
<div class="q-my-md">
<q-input class="q-mr-md q-ml-md" v-model="search.StartAddress" dense standout
:label="$t('travel.startCity')" />
</div>
</q-card>
</q-popup-proxy>
</q-btn>
<q-btn color="primary" unelevated :label="$t('query')" @click="setQueryHandler" />
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { DirtionmaryHelper } from '../../../config/dictionary' import { DirtionmaryHelper } from '../../../config/dictionary'
import { defineComponent, inject, reactive, ref } from 'vue' import { computed, defineComponent, inject, reactive, ref } from 'vue'
import { date } from 'quasar' import { date } from 'quasar'
import svgIcon from 'src/components/global/svg-icon.vue'
export default defineComponent({ export default defineComponent({
components: { svgIcon },
setup(props) { setup(props) {
const qDateProxy = ref(null) as any const qDateProxy = ref(null) as any
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: ''}) const dateRange = reactive({ from: '', to: '' })
const searchCnt = computed(() => {
let cnt = 0
if (search.TCID != '') cnt++
if (search.StartAddress != '') cnt++
if (search.SelectStartDate != '') cnt++
if (search.SelectEndDate != '') cnt++
return cnt
})
// dateRange.to = date.formatDate(date.addToDate(new Date(), { days: 50 }), 'YYYY/MM/DD') // 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') // dateRange.from = date.formatDate(date.addToDate(new Date(), { days: 20 }), 'YYYY/MM/DD')
const dateRangeFormat = ref(`${dateRange.from} - ${dateRange.to}`) const dateRangeFormat = ref(`${dateRange.from} - ${dateRange.to}`)
search.SelectStartDate = dateRange.from search.SelectStartDate = dateRange.from
search.SelectEndDate = dateRange.to search.SelectEndDate = dateRange.to
const canHide = ref(false)
const methods = { const methods = {
getFormat() { getFormat() {
if(!dateRangeFormat.value) { if (!dateRangeFormat.value) {
search.SelectStartDate = '' search.SelectStartDate = ''
search.SelectEndDate = '' search.SelectEndDate = ''
} }
}, },
setQueryHandler(){ setQueryHandler() {
realSearch.SelectStartDate=search.SelectStartDate realSearch.SelectStartDate = search.SelectStartDate
realSearch.SelectEndDate=search.SelectEndDate realSearch.SelectEndDate = search.SelectEndDate
realSearch.TCID=search.TCID realSearch.TCID = search.TCID
realSearch.StartAddress=search.StartAddress realSearch.StartAddress = search.StartAddress
}, },
dateRangeHandler(e: any) { dateRangeHandler(e: any) {
search.SelectStartDate = `${e.from.year}/${e.from.month}/${e.from.day}` search.SelectStartDate = `${e.from.year}/${e.from.month}/${e.from.day}`
...@@ -50,15 +94,16 @@ export default defineComponent({ ...@@ -50,15 +94,16 @@ export default defineComponent({
if (qDateProxy.value) qDateProxy.value.hide() if (qDateProxy.value) qDateProxy.value.hide()
}, },
optionsFn(cd: any) { optionsFn(cd: any) {
return cd >= date.formatDate(date.adjustDate(new Date(), {year: 2000, month: 1, days: 1 }), 'YYYY/MM/DD') return cd >= date.formatDate(date.adjustDate(new Date(), { year: 2000, month: 1, days: 1 }), 'YYYY/MM/DD')
}, },
} }
return { return {
...methods, ...methods,
search, search,
dateRange, dateRange,
dateRangeFormat dateRangeFormat,
searchCnt,
canHide
} }
} }
}) })
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<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"> <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="col-2 ">
<div class="mb-title"> <div class="mb-title">
<i class="iconfont icon-biaoti1"></i><span>{{ $t('travel.planInfo') }}</span> <i class="iconfont icon-biaoti1"></i><span>{{ $t('travel.airInfo') }}</span>
</div> </div>
{{ x.GTeamName }} {{ x.GTeamName }}
<div class="mb"> <div class="mb">
...@@ -19,9 +19,9 @@ ...@@ -19,9 +19,9 @@
<span v-if="x.StartAddress" class="q-mt-md text-weight-bold text-negative">{{ x.StartAddress }} {{ $t('travel.start') }}</span> <span v-if="x.StartAddress" class="q-mt-md text-weight-bold text-negative">{{ x.StartAddress }} {{ $t('travel.start') }}</span>
</div> </div>
</div> </div>
<div class="col-4 q-pl-md"> <div class="col-4" :class="$q.platform.is.desktop ? 'q-pl-md' : ''">
<div class="mb-title"> <div class="mb-title">&nbsp;
<i class="iconfont icon-hangban1"></i><span>{{ $t('travel.airInfo') }}</span> <!-- <i class="iconfont icon-hangban1"></i><span>{{ $t('travel.airInfo') }}</span> -->
</div> </div>
<div class="FlightDiv-TCL cursor-pointer" @click="showDialogF(x)"> <div class="FlightDiv-TCL cursor-pointer" @click="showDialogF(x)">
<div v-for="(subItem, subIndex) in x.TravelTeamFlightList" :key="subIndex + 1000" class="TCL-flighInfoList"> <div v-for="(subItem, subIndex) in x.TravelTeamFlightList" :key="subIndex + 1000" class="TCL-flighInfoList">
...@@ -58,10 +58,15 @@ ...@@ -58,10 +58,15 @@
>{{ x.YSeat }} <span class="item-title q-ml-md">{{ $t('travel.unUseNum') }}:</span>{{ x.SurplusYSeatNum }}</span >{{ x.YSeat }} <span class="item-title q-ml-md">{{ $t('travel.unUseNum') }}:</span>{{ x.SurplusYSeatNum }}</span
> >
</div> </div>
<div class="q-mt-sm"> <div class="mb bold">
<span class="item-title">{{ $t('travel.returnMoney') }}:</span><span class="text-negative">{{ x.RakeBackRatio }} / {{ $t('travel.people') }}</span> <span class="item-title">{{ $t('travel.status.waiting') }}:</span
><span
>0 </span>
</div> </div>
<div class="q-mt-sm"> <div class="q-mt-sm" v-if="isMember">
<span class="item-title">{{ $t('travel.returnMoney') }}:</span><span class="text-negative">{{ x.RakeBackRatio }} / pax</span>
</div>
<div class="q-mt-sm" v-if="isMember">
<span class="item-title text-primary cursor-pointer">{{ $t('travel.queryDetail') }}</span> <span class="item-title text-primary cursor-pointer">{{ $t('travel.queryDetail') }}</span>
<q-popup-proxy :offset="[0, 10]"> <q-popup-proxy :offset="[0, 10]">
<q-card class="" flat> <q-card class="" flat>
...@@ -71,8 +76,10 @@ ...@@ -71,8 +76,10 @@
<div class="q-pa-sm text-center col" style="border-right: 1px solid #eee;">{{ $t('travel.ratio') }}</div> <div class="q-pa-sm text-center col" style="border-right: 1px solid #eee;">{{ $t('travel.ratio') }}</div>
</div> </div>
<div class="row items-center" v-for="(item, index) in x.RakeBackList" :key="index" :class="{'bg-green-2': x.RakeBackRatio == item.Ratio}"> <div class="row items-center" v-for="(item, index) in x.RakeBackList" :key="index" :class="{'bg-green-2': x.RakeBackRatio == item.Ratio}">
<div class="q-pa-sm text-center col" style="border-right: 1px solid #eee;">{{ item.MinGuest }}-{{ item.MaxGuest }}{{ $t('travel.people') }}</div> <div class="q-pa-sm text-center col" style="border-right: 1px solid #eee;">{{ item.MinGuest }}-{{ item.MaxGuest }}
<div class="q-pa-sm text-center col" style="border-right: 1px solid #eee;">{{ item.Ratio }}/{{ $t('travel.people') }}</div> pax
</div>
<div class="q-pa-sm text-center col" style="border-right: 1px solid #eee;">{{ item.Ratio }}/pax</div>
<!-- <div class="q-pa-sm text-center col"> <!-- <div class="q-pa-sm text-center col">
<div class="bg-green" style="width:10px;height:10px;border-radius:50%; display: inline-block;" v-if="x.RakeBackRatio == item.Ratio"></div> <div class="bg-green" style="width:10px;height:10px;border-radius:50%; display: inline-block;" v-if="x.RakeBackRatio == item.Ratio"></div>
</div> --> </div> -->
...@@ -104,7 +111,7 @@ ...@@ -104,7 +111,7 @@
<div class="mb-title"> <div class="mb-title">
<i class="iconfont icon-jiage"></i><span>{{ $t('travel.priceInfo') }}</span> <i class="iconfont icon-jiage"></i><span>{{ $t('travel.priceInfo') }}</span>
</div> </div>
<div class="mb bold"> <div class="mb bold" v-if="isMember">
<span class="item-title">{{ $t('travel.midPrice') }}: </span>{{ x.B2BMemberPrice }} <span class="item-title">{{ $t('travel.midPrice') }}: </span>{{ x.B2BMemberPrice }}
</div> </div>
<div class="mb bold"> <div class="mb bold">
...@@ -113,13 +120,15 @@ ...@@ -113,13 +120,15 @@
{{ x.ChildNoNeedPrice }} {{ x.ChildNoNeedPrice }}
</div> </div>
<div class="mb bold"> <div class="mb bold">
<span class="item-title">{{ $t('travel.Baby') }}:</span> {{ x.BabyPrice }} <span class="item-title q-ml-md">{{ $t('travel.BabyChargePrice') }}: </span>{{ x.BabyChargePrice }} <span class="item-title">{{ $t('travel.Baby') }}:</span> {{ x.BabyPrice }}
<!-- <span class="item-title q-ml-md">{{ $t('travel.BabyChargePrice') }}: </span>{{ x.BabyChargePrice }} -->
<span class="item-title q-ml-md">{{ $t('travel.VisaPrice') }}: </span>{{ x.VisaPrice }}
</div> </div>
<div class="mb bold"> <!-- <div class="mb bold">
<span class="item-title">{{ $t('travel.OldManChargePrice') }}:</span> <span class="item-title">{{ $t('travel.OldManChargePrice') }}:</span>
{{ x.OldManChargePrice }} {{ x.OldManChargePrice }}
<span class="item-title q-ml-md">{{ $t('travel.VisaPrice') }}: </span>{{ x.VisaPrice }} <span class="item-title q-ml-md">{{ $t('travel.VisaPrice') }}: </span>{{ x.VisaPrice }}
</div> </div> -->
<div class="mb bold"> <div class="mb bold">
<span class="item-title">{{ $t('travel.SingleRoomPrice') }}:</span> <span class="item-title">{{ $t('travel.SingleRoomPrice') }}:</span>
{{ x.SingleRoomPrice }} {{ x.SingleRoomPrice }}
...@@ -127,8 +136,8 @@ ...@@ -127,8 +136,8 @@
</div> </div>
</div> </div>
<div class="col-1"> <div class="col-1">
<q-btn color="primary" unelevated @click="ViewPayment(x)">{{ $t('travel.buy') }}</q-btn> <q-btn color="primary" flat dense @click="ViewPayment(x)">{{ $t('travel.buy') }}</q-btn>
<q-btn :class="$q.platform.is.desktop ? 'q-mt-md' : 'q-ml-md'" color="primary" unelevated @click="gotoUrl(x)">{{ $t('travel.payOrder') }}</q-btn> <q-btn v-if="isMember" flat dense :class="$q.platform.is.desktop ? 'q-mt-md' : 'q-ml-md'" color="primary" @click="gotoUrl(x)">{{ $t('travel.payOrder') }}</q-btn>
</div> </div>
<q-dialog width="900" v-model="showItem" trigger="click"> <q-dialog width="900" v-model="showItem" trigger="click">
<div class="TC_tripDetails" style="width: 900px; background-color: #fff"> <div class="TC_tripDetails" style="width: 900px; background-color: #fff">
...@@ -206,6 +215,8 @@ import { currentRouter } from '../../../router' ...@@ -206,6 +215,8 @@ import { currentRouter } from '../../../router'
// import BankAccount from '../../BankAccount.vue' // import BankAccount from '../../BankAccount.vue'
import AddOrder from './addOrder.vue' import AddOrder from './addOrder.vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { UserGetter } from 'src/store/modules/user/getters'
import { getStoreGetter } from 'src/store/utils'
export default defineComponent({ export default defineComponent({
components: { AddOrder }, components: { AddOrder },
...@@ -214,7 +225,9 @@ export default defineComponent({ ...@@ -214,7 +225,9 @@ export default defineComponent({
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()
const userInfo = getStoreGetter<UserGetter>('user', 'getUser')
const isMember = userInfo.isMember==1
console.log(userInfo)
watch(search, (n, o) => { watch(search, (n, o) => {
if (data.loading) return if (data.loading) return
data.pages.pageIndex = 1 data.pages.pageIndex = 1
...@@ -374,7 +387,8 @@ export default defineComponent({ ...@@ -374,7 +387,8 @@ export default defineComponent({
return { return {
...toRefs(data), ...toRefs(data),
...methods, ...methods,
moneyFormat moneyFormat,
isMember
} }
} }
}) })
......
...@@ -7,7 +7,11 @@ const routes: RouteRecordRaw[] = [{ ...@@ -7,7 +7,11 @@ const routes: RouteRecordRaw[] = [{
component: () => import('layouts/MainLayout.vue'), component: () => import('layouts/MainLayout.vue'),
children: [{ children: [{
path: '', path: '',
component: () => import('pages/Index.vue') component: () => import('pages/travel/order.vue')
},
{
path: '/notice',
component: () => import('pages/notice/List.vue'),
}, },
{ {
path: '/hotel', path: '/hotel',
...@@ -43,7 +47,7 @@ const routes: RouteRecordRaw[] = [{ ...@@ -43,7 +47,7 @@ const routes: RouteRecordRaw[] = [{
path: '/didahotel', //道旅酒店 path: '/didahotel', //道旅酒店
component: () => import('pages/scattered/didaHotel.vue') component: () => import('pages/scattered/didaHotel.vue')
}, },
{ {
path: '/scattered/HotelDetails/:hotelId/:groupBookingFlg/:lowrateBySetCurrency', path: '/scattered/HotelDetails/:hotelId/:groupBookingFlg/:lowrateBySetCurrency',
component: () => import('pages/scattered/hotelDetails.vue') }, component: () => import('pages/scattered/hotelDetails.vue') },
{ {
......
...@@ -144,6 +144,21 @@ const useMenus = { ...@@ -144,6 +144,21 @@ const useMenus = {
} }
] ]
}) })
menus.push({
name: t('menu.notice.first'),
url: '/notice',
id: 23,
parentId: 0,
icon: 'Shopping/Box1.svg',
childs: [
{
name: t('menu.notice.second'),
url: '/notice',
id: 24,
parentId: 23,
}
]
})
// menus.push({ // menus.push({
// name: t('menu.finance.first'), // name: t('menu.finance.first'),
// url: '', // url: '',
......
...@@ -459,28 +459,28 @@ export function getLangs() { ...@@ -459,28 +459,28 @@ export function getLangs() {
langLocale:"enUS", langLocale:"enUS",
langName:"English" langName:"English"
} }
const koHG:SitLang={ // const koHG:SitLang={
langLocale:"koHG", // langLocale:"koHG",
langName:"한국어", // langName:"한국어",
quasarLang:'ko-KR' // quasarLang:'ko-KR'
} // }
const jaRB:SitLang={ const jaRB:SitLang={
langLocale:"jaRB", langLocale:"jaRB",
langName:"日本語", langName:"日本語",
quasarLang:'zh-TW' quasarLang:'zh-TW'
} }
const inID:SitLang={ // const inID:SitLang={
langLocale:"inID", // langLocale:"inID",
langName:"Indonesia", // langName:"Indonesia",
quasarLang:'in-ID' // quasarLang:'in-ID'
} // }
let langs:SitLang[]=[] let langs:SitLang[]=[]
// 根据域名渲染简体 // 根据域名渲染简体
if(!getDomainName()){ if(!getDomainName()){
langs.push(zhSw) langs.push(zhSw)
}else{ }else{
langs.push(zhTw,koHG,enUs,jaRB,inID) langs.push(zhTw,enUs,jaRB)
} }
return langs return langs
......
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