Commit 0526bfbc authored by 罗超's avatar 罗超

修改冲突

parent ef0762cb
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
<link rel="icon" type="image/png" sizes="32x32" href="icons/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="32x32" href="icons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="icons/favicon-16x16.png"> <link rel="icon" type="image/png" sizes="16x16" href="icons/favicon-16x16.png">
<link rel="icon" type="image/ico" href="favicon.ico"> <link rel="icon" type="image/ico" href="favicon.ico">
<link rel="apple-touch-icon-precomposed" href="icons/favicon-128x128.png">
<script src="https://api.map.baidu.com/api?type=webgl&v=2.0&ak=OBd2bhrqKUSbQGpniCZ996suti9YG7Bc"></script> <script src="https://api.map.baidu.com/api?type=webgl&v=2.0&ak=OBd2bhrqKUSbQGpniCZ996suti9YG7Bc"></script>
</head> </head>
<body> <body>
......
{ {
"name": "bigwood", "name": "bigwood",
"version": "0.0.1", "version": "1.0.0 beta.1",
"description": "PIC 同業訂房網", "description": "PIC 同業網,日本直採地接資源一網打盡,用房、用車、用餐統統都有。在線報價,快速反饋我們時刻等待著您的到來。",
"productName": "PIC 同業訂房網", "productName": "PIC 同業網",
"author": "alex9012 <alex9012@vip.qq.com>", "author": "alex9012 <alex9012@vip.qq.com>",
"private": true, "private": true,
"scripts": { "scripts": {
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
"vue-i18n": "^9.2.2", "vue-i18n": "^9.2.2",
"vue-inline-svg": "next", "vue-inline-svg": "next",
"vue-router": "^4.0.0", "vue-router": "^4.0.0",
"vue3-google-map": "^0.15.0",
"vuex": "^4.0.1", "vuex": "^4.0.1",
"vuex-persistedstate": "^4.1.0" "vuex-persistedstate": "^4.1.0"
}, },
......
...@@ -64,10 +64,13 @@ module.exports = configure(function (ctx) { ...@@ -64,10 +64,13 @@ module.exports = configure(function (ctx) {
publicPath: ctx.dev ? '/' : './', publicPath: ctx.dev ? '/' : './',
env: ctx.dev env: ctx.dev
? { ? {
BASE_APP_API: 'http://192.168.10.11:8083/api/common/post' BASE_APP_API: 'http://192.168.10.11:8083/api/common/post',
VERSION:require('./package.json').version,
} }
: { : {
BASE_APP_API: 'https://reborn.oytour.com/api/common/post' BASE_APP_API: 'https://reborn.oytour.com/api/common/post',
VERSION:require('./package.json').version
}, },
// extendWebpack(cfg, { isServer, isClient }) { // extendWebpack(cfg, { isServer, isClient }) {
...@@ -111,7 +114,14 @@ module.exports = configure(function (ctx) { ...@@ -111,7 +114,14 @@ module.exports = configure(function (ctx) {
devServer: { devServer: {
https: false, https: false,
port: 8080, port: 8080,
open: true // opens browser window automatically open: true, // opens browser window automatically
proxy: {
'/getCountry': {
target: 'https://api.map.baidu.com',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/getCountry/, '')
}
}
}, },
// https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework // https://v2.quasar.dev/quasar-cli/quasar-conf-js#Property%3A-framework
......
...@@ -120,7 +120,8 @@ export interface TeamMemberType { ...@@ -120,7 +120,8 @@ export interface TeamMemberType {
export interface SitLang{ export interface SitLang{
langName?:string, langName?:string,
langLocale?:string, langLocale?:string,
langIcon?:string langIcon?:string,
quasarLang?:string
} }
......
...@@ -6,13 +6,15 @@ ...@@ -6,13 +6,15 @@
import { defineComponent, onBeforeUnmount } from 'vue'; import { defineComponent, onBeforeUnmount } from 'vue';
import { useQuasar,QSpinnerFacebook } from 'quasar' import { useQuasar,QSpinnerFacebook } from 'quasar'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import axios from 'axios';
import { DirtionmaryHelper } from './config/dictionary';
export default defineComponent({ export default defineComponent({
name: 'App', name: 'App',
setup(props, context) { setup(props, context) {
const { t } = useI18n() const { t } = useI18n()
const $q = useQuasar() const $q = useQuasar()
let timer let timer = null as any
onBeforeUnmount(() => { onBeforeUnmount(() => {
if (timer !== void 0) { if (timer !== void 0) {
clearTimeout(timer) clearTimeout(timer)
...@@ -34,11 +36,29 @@ export default defineComponent({ ...@@ -34,11 +36,29 @@ export default defineComponent({
$q.loading.hide() $q.loading.hide()
timer = void 0 timer = void 0
}, 500) }, 500)
},
getIp() {
if(localStorage.getItem(DirtionmaryHelper.USER_IN_COUNTRY)) return
localStorage.setItem(DirtionmaryHelper.USER_IN_COUNTRY,$q.lang.getLocale()=='zh-CN'?'CN':'WG')
// axios.get('https://ipv4.icanhazip.com/').then(async res => {
// let ip = res.data
// if (ip) {
// let url = `https://api.map.baidu.com/location/ip?ak=OBd2bhrqKUSbQGpniCZ996suti9YG7Bc&ip=${ip}&coor=bd09ll`
// if(process.env.NODE_ENV=='development'){
// url = `/getCountry/location/ip?ak=OBd2bhrqKUSbQGpniCZ996suti9YG7Bc&ip=${ip}&coor=bd09ll`
// }
// axios.get(url).then(async r => {
// localStorage.setItem(DirtionmaryHelper.USER_IN_COUNTRY,r.data.status==0 && r.data.address.indexOf('台湾')==-1?'CN':'WG')
// })
// }
// })
} }
} }
if(window.performance.navigation.type!=1){ if(window.performance.navigation.type!=1){
methods.showLoading() methods.showLoading()
} }
methods.getIp()
return { ...methods } return { ...methods }
} }
}); });
...@@ -52,23 +72,23 @@ export default defineComponent({ ...@@ -52,23 +72,23 @@ export default defineComponent({
top: 0 top: 0
bottom: 0 bottom: 0
.light-shadow .light-shadow
box-shadow: 0px 0px 20px 0px rgba(76, 87, 125, 0.02) !important box-shadow: 0px 0px 20px 0px rgba(76, 87, 125, 0.2) !important
@font-face @font-face
// 苹方字体 // 苹方字体
font-family: 'pf' font-family: 'pf'
src: url('../assets/fonts/PingFangMedium.ttf') format('truetype') src: url('./assets/fonts/PingFangMedium.ttf') format('truetype')
font-weight: normal font-weight: normal
font-style: normal font-style: normal
@font-face @font-face
// 苹方加粗字体 // 苹方加粗字体
font-family: 'pfb' font-family: 'pfb'
src: url('../assets/fonts/PingFangBold.ttf') format('truetype') src: url('./assets/fonts/PingFangBold.ttf') format('truetype')
font-weight: normal font-weight: normal
font-style: normal font-style: normal
@font-face @font-face
// 微软雅黑极细字体 // 微软雅黑极细字体
font-family: 'msl' font-family: 'msl'
src: url('../assets/fonts/MicrosoftYaHeiUISemilight.ttf') format('truetype') src: url('./assets/fonts/mls.ttf') format('truetype')
font-weight: normal font-weight: normal
font-style: normal font-style: normal
@font-face @font-face
...@@ -80,7 +100,7 @@ export default defineComponent({ ...@@ -80,7 +100,7 @@ export default defineComponent({
@font-face @font-face
// 正常英文字体 // 正常英文字体
font-family: 'Poppins' font-family: 'Poppins'
src: url('../assets/fonts/Poppins-Regular.ttf') format('truetype') src: url('./assets/fonts/Poppins-Regular.ttf') format('truetype')
font-weight: normal font-weight: normal
font-style: normal font-style: normal
.pf .pf
......
...@@ -66,6 +66,24 @@ class HotelService { ...@@ -66,6 +66,24 @@ class HotelService {
return request('hotel_post_GetHasStockHotelList', params) return request('hotel_post_GetHasStockHotelList', params)
} }
/**
* 酒店温馨提示
* @param QStartDate 开始时间
* @returns
*/
static async GetHotelTips(QStartDate:string): Promise<HttpResponse> {
let params= {
"QStartDate":QStartDate,
"QEndDate":"",
"pageIndex":1,
"pageSize":100,
"currentPage":1,
"total":0,
"OpType":0
}
return request('hoteltip_get_GetPageList', params)
}
static async GetHotelList(param:any):Promise<HttpResponse>{ static async GetHotelList(param:any):Promise<HttpResponse>{
param.MaxPrice=param.MaxPrice&&param.MaxPrice!=''?param.MaxPrice:0 param.MaxPrice=param.MaxPrice&&param.MaxPrice!=''?param.MaxPrice:0
param.MinPrice=param.MinPrice&&param.MinPrice!=''?param.MinPrice:0 param.MinPrice=param.MinPrice&&param.MinPrice!=''?param.MinPrice:0
......
...@@ -128,7 +128,7 @@ export default defineComponent({ ...@@ -128,7 +128,7 @@ export default defineComponent({
}) })
}, },
optionsFn(cd: any) { optionsFn(cd: any) {
return cd >= date.formatDate(date.addToDate(new Date(), { days: 15 }), 'YYYY/MM/DD') return cd >= date.formatDate(date.addToDate(new Date(), { days: 20}), 'YYYY/MM/DD')
}, },
changearea(e: number, option: any, pathValues: Array<any>) { changearea(e: number, option: any, pathValues: Array<any>) {
search.Province = 0 search.Province = 0
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<q-card flat class="light-shadow rounded-border window-width q-pa-none"> <q-card flat class="light-shadow rounded-border window-width q-pa-none">
<q-card-section class="q-pa-sm"> <q-card-section class="q-pa-sm">
<div class="text-h6">{{ h.HotelName }}</div> <div class="text-h6">{{ h.HotelName }}</div>
<div class="f12 text-grey-5">{{ search.StartDate }} {{ $t('hotel.col.zhi')}} {{ search.EndDate }} {{ $t('hotel.pricetips') }}</div> <div class="f12 text-grey-5">{{ `${search.StartDate} ${$t('hotel.col.zhi')} ${search.EndDate}` }} {{ $t('hotel.pricetips') }}</div>
</q-card-section> </q-card-section>
<div style="max-height: 60vh; overflow-y: auto" class="q-pa-sm"> <div style="max-height: 60vh; overflow-y: auto" class="q-pa-sm">
<template v-for="x in h.subList"> <template v-for="x in h.subList">
......
<template>
<q-dialog v-model="show" persistent seamless>
<q-card style="width:40vw;min-width:375px;max-width:800px" class="light-shadow q-pb-md">
<q-card-section class="row items-center dialog-close">
<div class="text-h6 col">{{$t('v101.hotelTips')}}</div>
<div class="dialog-close">
<svg-icon icon="Navigation/Close.svg" :size="30" color="nav"></svg-icon>
</div>
</q-card-section>
<div style="max-height:50vh;overflow-y:auto;">
<div class="bg-grey-1 q-px-lg q-pt-sm rounded-borders q-mx-md">
<q-timeline color="primary" layout="dense">
<q-timeline-entry
:subtitle="x.CreateTimeStr"
color="orange"
icon="done_all"
v-for="x in tips"
>
<div v-html="x.TipContent"></div>
</q-timeline-entry>
<!-- <q-timeline-entry
subtitle="February 22, 1986"
color="orange"
icon="done_all"
>
<div>
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
</div>
</q-timeline-entry> -->
</q-timeline>
</div>
</div>
<div class="text-center">
<q-btn color="primary" unelevated class="q-px-xl" :label="$t('v101.iknow')" v-close-popup />
</div>
</q-card>
</q-dialog>
</template>
<script lang="ts">
import { date } from "quasar";
import { ApiResult } from "src/@types/enumHelper";
import HotelService from "src/api/hotel";
import svgIcon from "src/components/global/svg-icon.vue";
import { DirtionmaryHelper } from "src/config/dictionary";
import { defineComponent, reactive, toRefs } from "vue";
export default defineComponent({
components: { svgIcon },
setup(props) {
const data=reactive({
show:false,
tips:[] as Array<any>
})
const methods = {
getHotelTips(){
let startDate = date.addToDate(new Date,{days:-20})
if(localStorage[DirtionmaryHelper.HOTEL_TIPS_LASTDATE]){
startDate = new Date(localStorage[DirtionmaryHelper.HOTEL_TIPS_LASTDATE])
}
HotelService.GetHotelTips(date.formatDate(startDate,'YYYY/MM/DD HH:mm:ss')).then(r=>{
if(r.data.resultCode==ApiResult.SUCCESS){
data.tips=r.data.data.pageData
data.tips.forEach((x:any)=>{
x.CreateTimeStr = date.formatDate(x.CreateTimeStr,'dddd MM/DD HH:mm')
})
data.show = data.tips.length>0
localStorage.setItem(DirtionmaryHelper.HOTEL_TIPS_LASTDATE,date.formatDate(new Date(),'YYYY/MM/DD HH:mm:ss'))
}
})
},
}
methods.getHotelTips()
return {
...toRefs(data),
...methods
}
}
})
</script>
<style>
.dialog-close svg g [fill]{
fill: rgb(161,165,183) !important;
cursor: pointer;
}
.dialog-close:hover svg g [fill]{
fill:var(--q-primary) !important;
}
</style>
...@@ -101,8 +101,8 @@ export default defineComponent({ ...@@ -101,8 +101,8 @@ export default defineComponent({
data.scrollStyle = useScrollModule().scrollStyle data.scrollStyle = useScrollModule().scrollStyle
const search = inject(DirtionmaryHelper.HOTEL_QUERY_PARAM) as any const search = inject(DirtionmaryHelper.HOTEL_QUERY_PARAM) as any
data.dateRange.to = date.formatDate(date.addToDate(new Date(), { days: 45 }), 'YYYY/MM/DD') data.dateRange.to = date.formatDate(date.addToDate(new Date(), { days: 50 }), 'YYYY/MM/DD')
data.dateRange.from = date.formatDate(date.addToDate(new Date(), { days: 15 }), 'YYYY/MM/DD') data.dateRange.from = date.formatDate(date.addToDate(new Date(), { days: 20 }), 'YYYY/MM/DD')
data.dateRangeFormat = `${data.dateRange.from} - ${data.dateRange.to}` data.dateRangeFormat = `${data.dateRange.from} - ${data.dateRange.to}`
search.StartDate = data.dateRange.from search.StartDate = data.dateRange.from
search.EndDate = data.dateRange.to search.EndDate = data.dateRange.to
...@@ -169,7 +169,7 @@ export default defineComponent({ ...@@ -169,7 +169,7 @@ 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.addToDate(new Date(), { days: 15 }), 'YYYY/MM/DD') return cd >= date.formatDate(date.addToDate(new Date(), { days: 20 }), 'YYYY/MM/DD')
}, },
changearea(e: number, option: any, pathValues: Array<any>) { changearea(e: number, option: any, pathValues: Array<any>) {
search.Province = 0 search.Province = 0
......
<template> <template>
<q-card flat class="q-pa-lg" style="shadow: 0px 0px 50px 0px rgba(82, 63, 105, 0.15);" :style="{'width':$q.platform.is.desktop?'50vw':'100vw'}"> <q-card flat class="q-pa-lg" style="shadow: 0px 0px 50px 0px rgba(82, 63, 105, 0.15);" :style="{'width':$q.platform.is.desktop?'50vw':'100vw'}">
<div class="q-mb-xs"> <div class="q-mb-xs">
<div class=""> <div class="" :class="{'row items':$q.platform.is.desktop}">
<span class="text-primary text-h6">{{ parameters.HotelName }}</span> <span class="text-primary text-h6 col">{{ parameters.HotelName }}</span>
<div class="f12" :class="{'q-mt-sm':$q.platform.is.mobile}">
<span class="q-mr-md">
<q-icon name="check" size="18px" color="primary" v-if="hotelInfor.PriceList[0].PriceIsBreakfast==1" />
<q-icon name="close" size="18px" color="negative" v-else />
{{$t('dinner.a')}}
</span>
<span class="">
<q-icon name="check" size="18px" color="primary" v-if="hotelInfor.PriceList[0].PriceIsDinner==1" />
<q-icon name="close" size="18px" color="negative" v-else />
{{$t('dinner.c')}}
</span>
</div>
</div> </div>
<div class="q-my-md rounded-borders q-pa-sm bg-yellow-1 row items-center justify-between"> <div class="q-my-md rounded-borders q-pa-sm bg-yellow-1 row items-center justify-between">
<q-field stack-label :label="$t('hotel.inHouseDate')" class="text-primary" standout dense> <q-field stack-label :label="$t('hotel.inHouseDate')" class="text-primary" standout dense>
......
This diff is collapsed.
...@@ -2,7 +2,8 @@ ...@@ -2,7 +2,8 @@
import { Notify } from 'quasar' import { Notify } from 'quasar'
import { i18n } from '../boot/i18n' import { i18n } from '../boot/i18n'
const AppConfig = { const AppConfig = {
$message: Notify $message: Notify,
$version: process.env.VERSION
} }
const StaticConfig = { const StaticConfig = {
MaxPageSize: 1000, MaxPageSize: 1000,
......
...@@ -53,5 +53,15 @@ class DirtionmaryHelper { ...@@ -53,5 +53,15 @@ class DirtionmaryHelper {
* 酒店訂單數量 * 酒店訂單數量
*/ */
static readonly HOTEL_CAR_ORDER_LENGTH = "hotelcarorderlength" static readonly HOTEL_CAR_ORDER_LENGTH = "hotelcarorderlength"
/**
* 酒店温馨提示最后更新时间
*/
static readonly HOTEL_TIPS_LASTDATE = "hoteltipslastdate"
/**
* 用户是否在中国
*/
static readonly USER_IN_COUNTRY = 'userincountry'
} }
export { userDictionmary,DirtionmaryHelper } export { userDictionmary,DirtionmaryHelper }
...@@ -2,6 +2,7 @@ declare namespace NodeJS { ...@@ -2,6 +2,7 @@ declare namespace NodeJS {
interface ProcessEnv { interface ProcessEnv {
NODE_ENV: string NODE_ENV: string
VUE_ROUTER_MODE: 'hash' | 'history' | 'abstract' | undefined VUE_ROUTER_MODE: 'hash' | 'history' | 'abstract' | undefined
VUE_ROUTER_BASE: string | undefined VUE_ROUTER_BASE: string | undefined,
VERSION: string | undefined
} }
} }
...@@ -155,7 +155,7 @@ export default { ...@@ -155,7 +155,7 @@ export default {
edit: '注文変更', edit: '注文変更',
view: '詳細を見る' view: '詳細を見る'
}, },
paytype: { payType: {
t1: '店で自己負担', t1: '店で自己負担',
t2: '出発前の支払い' t2: '出発前の支払い'
}, },
...@@ -169,7 +169,7 @@ export default { ...@@ -169,7 +169,7 @@ export default {
m: '小計', m: '小計',
noRoomNo: '予約番号', noRoomNo: '予約番号',
noneTax: '税入', noneTax: '税入',
pt: '支払い方法', pt: '支払い方法'
}, },
search: { search: {
status: '注文状態', status: '注文状態',
...@@ -182,12 +182,12 @@ export default { ...@@ -182,12 +182,12 @@ export default {
contactInfo: '連絡先情報', contactInfo: '連絡先情報',
contactInfoHolder: '連絡先/連絡先を入力してください' contactInfoHolder: '連絡先/連絡先を入力してください'
}, },
ordertype: { orderType: {
default: 'あらゆるタイプ', default: 'あらゆるタイプ',
tour: 'チームオーダー', tour: 'チームオーダー',
guest: 'バラバラ予約' guest: 'バラバラ予約'
}, },
orderstatus: { orderStatus: {
normal: 'すべての注文', normal: 'すべての注文',
apply: '待確認', apply: '待確認',
check: '確認した', check: '確認した',
...@@ -195,21 +195,21 @@ export default { ...@@ -195,21 +195,21 @@ export default {
sun: '損取り注文' sun: '損取り注文'
} }
}, },
dayofweek: { dayOfWeek: {
mon: '', mon: '月曜',
tues: '2', tues: '火曜',
wed: '3', wed: '水曜',
thur: '4', thur: '木曜',
fri: '5', fri: '金曜',
sat: '6', sat: '土曜',
sun: '日' sun: '日'
}, },
notifications: { Notifications: {
title: 'お知らせ', title: 'お知らせ',
subtitle: '新メッセージ', subtitle: '新メッセージ',
more: 'もっと', more: 'もっと',
time: 'h' time: 'h'
}, },
hotel: { hotel: {
newDateOrder: '新しい日', newDateOrder: '新しい日',
newDateTips: '予約が必要な日を選んでください', newDateTips: '予約が必要な日を選んでください',
...@@ -237,7 +237,7 @@ export default { ...@@ -237,7 +237,7 @@ export default {
}, },
car: { car: {
shoppingTitle: 'ショッピングカート', shoppingTitle: 'ショッピングカート',
addshopping: '贊植贮金カート', addShopping: '贊植贮金カート',
orderTitle: '注文', orderTitle: '注文',
people: '人', people: '人',
between: '間', between: '間',
...@@ -317,7 +317,7 @@ export default { ...@@ -317,7 +317,7 @@ export default {
hight: '5つ星' hight: '5つ星'
} }
}, },
usermenu: { userMenu: {
mypro: 'プロフィール', mypro: 'プロフィール',
myfinace: 'お願い書', myfinace: 'お願い書',
fapiao: '請求書', fapiao: '請求書',
...@@ -389,11 +389,23 @@ export default { ...@@ -389,11 +389,23 @@ export default {
maxLengthPass: 'パスワードの長さは8 ~ 16桁', maxLengthPass: 'パスワードの長さは8 ~ 16桁',
updateResult: '新しいパスワードの設定に成功しました。すぐにアクセスできます', updateResult: '新しいパスワードの設定に成功しました。すぐにアクセスできます',
resultBtn: 'すぐログイン' resultBtn: 'すぐログイン'
} },
//#endregion //#endregion
//eg: //eg:
//#region v1.0.1 //#region v1.0.1
v101: {
downloadHands: '下載手佩本',
noneHands: '手佩書未生成',
hotelTips: 'ホテルの暖かい注意',
iknow: '私は知っている',
versionUpgrade: '記録更新',
comingsoon: 'これから始める',
comingsoonDesc: '我々はこの機能の開発を進めており,1ヶ月程度のサイクルでサービスを開始する予定である。ご支援ありがとうございます',
versonDetails: {
date: '2022/11/29',
content: ''
}
}
//#endregion //#endregion
} }
...@@ -196,13 +196,13 @@ export default { ...@@ -196,13 +196,13 @@ export default {
} }
}, },
dayOfWeek: { dayOfWeek: {
mon: '1', mon: '월요일',
tues: '2', tues: '화요일',
wed: '3', wed: '수요일',
thur: '4', thur: '목요일',
fri: '5', fri: '금요일',
sat: '6', sat: '토요일',
sun: '7' sun: '일요일'
}, },
Notifications: { Notifications: {
title: '통지', title: '통지',
...@@ -233,7 +233,7 @@ export default { ...@@ -233,7 +233,7 @@ export default {
zuoji:'고정 전화', zuoji:'고정 전화',
chuanzhen:'팩스', chuanzhen:'팩스',
guanwang:'공식 웹사이트', guanwang:'공식 웹사이트',
xiangqing1:'호텔 정보', xiangqing:'호텔 정보',
}, },
car: { car: {
shoppingTitle: '쇼핑 카트', shoppingTitle: '쇼핑 카트',
...@@ -389,11 +389,23 @@ export default { ...@@ -389,11 +389,23 @@ export default {
maxLengthPass: '암호의 길이는 8-16자리 사이여야 한다', maxLengthPass: '암호의 길이는 8-16자리 사이여야 한다',
updateResult: '새 비밀번호가 성공적으로 설정되었습니다,바로 로그인 가능합니다', updateResult: '새 비밀번호가 성공적으로 설정되었습니다,바로 로그인 가능합니다',
resultBtn: '지금 로그인' resultBtn: '지금 로그인'
} },
//#endregion //#endregion
//eg: //eg:
//#region v1.0.1 //#region v1.0.1
v101:{
downloadHands:'핸드북 다운',
noneHands:'손에 쥔 책은 태어나지 않았다',
hotelTips:'호텔 아늑한 알람',
iknow:'나는 이미 알고 있다',
versionUpgrade:'버전 업데이트',
comingsoon:'우리는 곧',
comingsoonDesc:'우리는이 기능을 개발하기 위해 노력하고 있으며, 1개월 정도의 주기를 예상하고 있다.당신의 지지에 감사 드립니다',
versonDetails:{
date:'2022/11/29',
content:''
}
}
//#endregion //#endregion
} }
...@@ -396,7 +396,16 @@ export default { ...@@ -396,7 +396,16 @@ export default {
//#region v1.0.1 //#region v1.0.1
v101:{ v101:{
downloadHands:'下載手佩書', downloadHands:'下載手佩書',
noneHands:'手佩書未生成' noneHands:'手佩書未生成',
hotelTips:'酒店溫馨提醒',
iknow:'我已知曉',
versionUpgrade:'版本更新紀錄',
comingsoon:'我們即將推出',
comingsoonDesc:'我們正在努力推進此功能的開發,預期將在1個月左右的週期內完成上線。感謝您的支持',
versonDetails:{
date:'2022/11/29',
content:''
}
} }
//#endregion //#endregion
} }
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<q-header reveal class="bg-white text-white q-px-md q-py-sm"> <q-header reveal class="bg-white text-white q-px-md q-py-sm">
<q-toolbar> <q-toolbar>
<q-toolbar-title class="row items-center"> <q-toolbar-title class="row items-center">
<div class="col row items-center"> <div class="col row items-center">
<q-btn dense flat round @click="toggleLeftDrawer" class="mobile-only"> <q-btn dense flat round @click="toggleLeftDrawer" class="mobile-only">
<svg-icon icon="Text/Menu.svg" :size="32"></svg-icon> <svg-icon icon="Text/Menu.svg" :size="32"></svg-icon>
...@@ -10,6 +11,7 @@ ...@@ -10,6 +11,7 @@
<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 class="bg-grey-2 rounded-borders q-px-md f12 text-grey-800 q-mr-md desktop-only">{{version}}</div>
<div class="rounded-borders header-item q-mr-lg"> <div class="rounded-borders header-item q-mr-lg">
<svg-icon color="grey" icon="design/component.svg" :size="25" :tips="$t('syslog')"></svg-icon> <svg-icon color="grey" icon="design/component.svg" :size="25" :tips="$t('syslog')"></svg-icon>
</div> </div>
...@@ -68,6 +70,8 @@ import Navs from '../components/layout/navs.vue' ...@@ -68,6 +70,8 @@ import Navs from '../components/layout/navs.vue'
import userInfo from "../components/layout/userInfo.vue"; import userInfo from "../components/layout/userInfo.vue";
import Notifications from "../components/layout/Notifications.vue"; import Notifications from "../components/layout/Notifications.vue";
import { DirtionmaryHelper } from '../config/dictionary' import { DirtionmaryHelper } from '../config/dictionary'
import { env } from 'process'
import { AppConfig } from 'src/config/app'
export default { export default {
components: { svgIcon, Navs,userInfo,Notifications }, components: { svgIcon, Navs,userInfo,Notifications },
setup() { setup() {
...@@ -78,6 +82,7 @@ export default { ...@@ -78,6 +82,7 @@ export default {
scrollStyle: {} as any, scrollStyle: {} as any,
timer: 0, timer: 0,
isDadge: true, isDadge: true,
version:''
}) })
const childPageTitle = ref('') const childPageTitle = ref('')
provide(DirtionmaryHelper.PAGE_TITLE_KEY ,childPageTitle) provide(DirtionmaryHelper.PAGE_TITLE_KEY ,childPageTitle)
...@@ -99,6 +104,7 @@ export default { ...@@ -99,6 +104,7 @@ export default {
},200) },200)
}, 1000); }, 1000);
}) })
data.version = AppConfig.$version
return { return {
...toRefs(data), ...toRefs(data),
...methods, ...methods,
......
<template>
<div class="fix-height-subpage column items-center justify-center bg-white">
<div class="text-center" style="width:350px;">
<q-img
src="../assets/images/jvs-log.png"
width="300px"
spinner-color="primary"
spinner-size="32px"
fill="cover"
/>
<div class="text-h6 q-mt-md text-grey-900">{{$t('v101.comingsoon')}}</div>
<div class="text-subtitle msl text-grey-500 q-mt-lg">{{$t('v101.comingsoonDesc')}}</div>
<q-img
src="../assets/images/chart-graph.png"
width="350px"
spinner-color="primary"
spinner-size="32px"
fill="cover"
/>
</div>
</div>
</template>
<script lang="ts">
export default {
}
</script>
<style>
</style>
<template> <template>
<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 items-center"> <div class="row items-center">
...@@ -82,12 +82,13 @@ import svgIcon from '../../components/global/svg-icon.vue'; ...@@ -82,12 +82,13 @@ import svgIcon from '../../components/global/svg-icon.vue';
import UserService from '../../api/user'; import UserService from '../../api/user';
import message from '../../utils/message'; import message from '../../utils/message';
import { ApiResult } from '../../@types/enumHelper'; import { ApiResult } from '../../@types/enumHelper';
import { useQuasar } from 'quasar';
export default defineComponent({ export default defineComponent({
components: { svgIcon }, components: { svgIcon },
setup() { setup() {
let { setTitle } = useMetaModule() let { setTitle } = useMetaModule()
const accountRef = ref(null) const accountRef = ref(null)
const {locale,t } = useI18n(); const {locale,t } = useI18n();
setTitle(t("forget.pageTitle")) setTitle(t("forget.pageTitle"))
...@@ -108,7 +109,7 @@ export default defineComponent({ ...@@ -108,7 +109,7 @@ export default defineComponent({
if(data.loading) return if(data.loading) return
const accountRefVal=accountRef as any const accountRefVal=accountRef as any
console.log(accountRef.value) console.log(accountRef.value)
accountRefVal.value.validate() accountRefVal.value.validate()
if(!accountRefVal.value.hasError){ if(!accountRefVal.value.hasError){
data.loading=true data.loading=true
...@@ -133,6 +134,7 @@ export default defineComponent({ ...@@ -133,6 +134,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('lanuage', val.langLocale??'')
} }
} }
......
...@@ -126,6 +126,7 @@ import useMetaModule from '../../module/meta/metaModule' ...@@ -126,6 +126,7 @@ import useMetaModule from '../../module/meta/metaModule'
import { useI18n } from 'vue-i18n' import { useI18n } from 'vue-i18n'
import { getLangs } from "../../utils/tools"; import { getLangs } from "../../utils/tools";
import { SitLang } from '../../@types'; import { SitLang } from '../../@types';
import { useQuasar } from 'quasar';
export default defineComponent({ export default defineComponent({
setup() { setup() {
//TODO: 缺陷,验证与提交应该使用Form表单来完成,不应该进行单个验证 //TODO: 缺陷,验证与提交应该使用Form表单来完成,不应该进行单个验证
...@@ -147,6 +148,7 @@ export default defineComponent({ ...@@ -147,6 +148,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('lanuage', val.langLocale)
} }
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
<div class="col q-mt-md" :class="{'light-shadow q-pa-md bg-white rounded-border':$q.platform.is.desktop}"> <div class="col q-mt-md" :class="{'light-shadow q-pa-md bg-white rounded-border':$q.platform.is.desktop}">
<list-table></list-table> <list-table></list-table>
</div> </div>
<hotel-tips></hotel-tips>
</div> </div>
</template> </template>
...@@ -15,9 +16,10 @@ import { defineComponent, inject, provide, reactive, ref, toRefs } from 'vue' ...@@ -15,9 +16,10 @@ import { defineComponent, inject, provide, reactive, ref, toRefs } from 'vue'
import { DirtionmaryHelper } from '../../config/dictionary' import { DirtionmaryHelper } from '../../config/dictionary'
import ListHeader from '../../components/hotel/list/ListHeader.vue' import ListHeader from '../../components/hotel/list/ListHeader.vue'
import ListTable from '../../components/hotel/list/ListTable.vue' import ListTable from '../../components/hotel/list/ListTable.vue'
import HotelTips from '../../components/hotel/list/HotelTips.vue'
import { date } from 'quasar' import { date } from 'quasar'
export default defineComponent({ export default defineComponent({
components: { svgIcon, ListHeader, ListTable }, components: { svgIcon, ListHeader, ListTable, HotelTips },
setup() { setup() {
const data = reactive({}) const data = reactive({})
let { setTitle } = useMetaModule() let { setTitle } = useMetaModule()
...@@ -45,7 +47,7 @@ export default defineComponent({ ...@@ -45,7 +47,7 @@ export default defineComponent({
const cacheCars = localStorage.getItem(DirtionmaryHelper.HOTEL_HOTELCARS_CACHE) const cacheCars = localStorage.getItem(DirtionmaryHelper.HOTEL_HOTELCARS_CACHE)
if(cacheCars){ if(cacheCars){
let cacheCarArray = JSON.parse(cacheCars)//.filter((x:any)=>date.getDateDiff(new Date(x.Date),new Date(), 'days')>=15 ) let cacheCarArray = JSON.parse(cacheCars).filter((x:any)=>date.getDateDiff(new Date(x.Date),new Date(), 'days')>=20 )
HotelCarList.value = cacheCarArray HotelCarList.value = cacheCarArray
} }
provide(DirtionmaryHelper.HOTEL_CAR_LIST, HotelCarList) provide(DirtionmaryHelper.HOTEL_CAR_LIST, HotelCarList)
...@@ -58,9 +60,7 @@ export default defineComponent({ ...@@ -58,9 +60,7 @@ export default defineComponent({
const menu=inject(DirtionmaryHelper.MENU_KEYS) as any const menu=inject(DirtionmaryHelper.MENU_KEYS) as any
menu.value=2 menu.value=2
const methods = { const methods = {}
}
return { return {
...toRefs(data), ...toRefs(data),
...methods ...methods
......
...@@ -436,8 +436,8 @@ export default defineComponent({ ...@@ -436,8 +436,8 @@ export default defineComponent({
methods.cancelHotelCount() methods.cancelHotelCount()
}, },
optionsFn(cd: any) { optionsFn(cd: any) {
data.tempHotels.key = date.formatDate(date.addToDate(new Date(), { days: 15 }), 'YYYY/MM/DD') data.tempHotels.key = date.formatDate(date.addToDate(new Date(), { days: 20 }), 'YYYY/MM/DD')
return cd >= date.formatDate(date.addToDate(new Date(), { days: 15 }), 'YYYY/MM/DD') && data.order.DetailList.findIndex((x: any) => x.key == cd) == -1 return cd >= date.formatDate(date.addToDate(new Date(), { days: 20 }), 'YYYY/MM/DD') && data.order.DetailList.findIndex((x: any) => x.key == cd) == -1
}, },
cancelHotelCount() { cancelHotelCount() {
data.order.HotelCount = 0 data.order.HotelCount = 0
......
import { defineAsyncComponent } from 'vue'
import { RouteRecordRaw } from 'vue-router' import { RouteRecordRaw } from 'vue-router'
const MainLayout = defineAsyncComponent(()=>import('layouts/MainLayout.vue'))
const Index = defineAsyncComponent(()=>import('pages/Index.vue'))
const HotelList = defineAsyncComponent(()=>import('pages/hotel/HotelList.vue'))
const HotelOrder = defineAsyncComponent(()=>import('pages/hotel/HotelOrder.vue') )
const ModifyHotelOrder = defineAsyncComponent(()=>import('pages/hotel/ModifyHotelOrder.vue'))
const personal = defineAsyncComponent(()=>import('pages/personal/personal.vue'))
const login = defineAsyncComponent(()=>import('pages/auth/login.vue'))
const regist = defineAsyncComponent(()=>import('pages/auth/regist.vue'))
const forget = defineAsyncComponent(()=>import('pages/auth/forget.vue'))
const newpassword = defineAsyncComponent(()=>import('pages/auth/newpassword.vue'))
const Error404 = defineAsyncComponent(()=>import('pages/Error404.vue'))
const routes: RouteRecordRaw[] = [ const routes: RouteRecordRaw[] = [
{ {
path: '/index', path: '/index',
component: MainLayout, component: () => import('layouts/MainLayout.vue'),
children: [ children: [
{ path: '', component: Index }, { path: '', component: () => import('pages/Index.vue') },
{ path: '/hotel', component: HotelList }, { path: '/hotel', component: () => import('pages/hotel/HotelList.vue') },
{ path: '/hotel/order/:orderId?', component: HotelOrder }, { path: '/hotel/order/:orderId?', component: () => import('pages/hotel/HotelOrder.vue') },
{ path: '/hotel/modify/:orderId', component: ModifyHotelOrder }, { path: '/hotel/modify/:orderId', component: () => import('pages/hotel/ModifyHotelOrder.vue') },
{ path: '/personal', component: personal } { path: '/personal', component: () => import('pages/personal/personal.vue')},
{ path: '/comingsoon', component: () => import('pages/ComingSoon.vue')}
] ]
}, },
{ {
path: '/auth/login', path: '/auth/login',
component: login component: () => import('pages/auth/login.vue')
}, },
{ {
path: '/auth/regist', path: '/auth/regist',
component: regist component: () => import('pages/auth/regist.vue')
}, },
{ {
path: '/auth/forget', path: '/auth/forget',
component: forget component: () => import('pages/auth/forget.vue')
}, },
{ {
path: '/auth/newpassword/:code', path: '/auth/newpassword/:code',
component: newpassword component: () => import('pages/auth/newpassword.vue')
}, },
// Always leave this as last one, // Always leave this as last one,
// but you can also remove it // but you can also remove it
{ {
path: '/:catchAll(.*)*', path: '/:catchAll(.*)*',
component: Error404 component: () => import('pages/Error404.vue')
} }
] ]
......
...@@ -41,13 +41,13 @@ const useMenus={ ...@@ -41,13 +41,13 @@ const useMenus={
childs:[ childs:[
{ {
name:t('menu.car.second'), name:t('menu.car.second'),
url:'', url:'/comingsoon',
id:5, id:5,
parentId:4, parentId:4,
}, },
{ {
name:t('menu.car.three'), name:t('menu.car.three'),
url:'', url:'/comingsoon',
id:6, id:6,
parentId:4, parentId:4,
} }
...@@ -62,13 +62,13 @@ const useMenus={ ...@@ -62,13 +62,13 @@ const useMenus={
childs:[ childs:[
{ {
name:t('menu.ticket.second'), name:t('menu.ticket.second'),
url:'', url:'/comingsoon',
id:8, id:8,
parentId:7, parentId:7,
}, },
{ {
name:t('menu.ticket.three'), name:t('menu.ticket.three'),
url:'', url:'/comingsoon',
id:9, id:9,
parentId:7, parentId:7,
} }
...@@ -83,13 +83,13 @@ const useMenus={ ...@@ -83,13 +83,13 @@ const useMenus={
childs:[ childs:[
{ {
name:t('menu.finance.second'), name:t('menu.finance.second'),
url:'', url:'/comingsoon',
id:11, id:11,
parentId:10, parentId:10,
}, },
{ {
name:t('menu.finance.three'), name:t('menu.finance.three'),
url:'', url:'/comingsoon',
id:12, id:12,
parentId:10, parentId:10,
} }
......
...@@ -227,7 +227,8 @@ export function getHotelType():HotelType[]{ ...@@ -227,7 +227,8 @@ export function getHotelType():HotelType[]{
export function getLangs() { export function getLangs() {
const zhTw:SitLang={ const zhTw:SitLang={
langLocale:"zhTW", langLocale:"zhTW",
langName:"中文繁体" langName:"中文繁体",
quasarLang:'zh-TW'
} }
const zhSw:SitLang={ const zhSw:SitLang={
langLocale:"zhSW", langLocale:"zhSW",
...@@ -239,11 +240,13 @@ export function getLangs() { ...@@ -239,11 +240,13 @@ export function getLangs() {
} }
const koHG:SitLang={ const koHG:SitLang={
langLocale:"koHG", langLocale:"koHG",
langName:"한국어" langName:"한국어",
quasarLang:'ko-KR'
} }
const jaRB:SitLang={ const jaRB:SitLang={
langLocale:"jaRB", langLocale:"jaRB",
langName:"日本語" langName:"日本語",
quasarLang:'zh-TW'
} }
let langs:SitLang[]=[] let langs:SitLang[]=[]
// zhSw,enUs // zhSw,enUs
......
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