Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
B
boyueCEnd
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
游洁
boyueCEnd
Commits
a37e1465
Commit
a37e1465
authored
Dec 01, 2025
by
youjie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
旅客信息
parent
97df7b02
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
548 additions
and
39 deletions
+548
-39
pen_2.png
src/assets/images/personal/pen_2.png
+0
-0
sc_1.png
src/assets/images/personal/sc_1.png
+0
-0
sc_2.png
src/assets/images/personal/sc_2.png
+0
-0
zh-CN.ts
src/i18n/locales/zh-CN.ts
+5
-0
UserService.ts
src/services/UserService.ts
+49
-0
accountCenter.vue
src/views/personalCenter/accountCenter.vue
+8
-27
account.vue
...views/personalCenter/components/accountCenter/account.vue
+0
-1
basicInfor.vue
...ws/personalCenter/components/accountCenter/basicInfor.vue
+23
-11
passengerList.vue
...personalCenter/components/accountCenter/passengerList.vue
+463
-0
No files found.
src/assets/images/personal/pen_2.png
0 → 100644
View file @
a37e1465
662 Bytes
src/assets/images/personal/sc_1.png
0 → 100644
View file @
a37e1465
366 Bytes
src/assets/images/personal/sc_2.png
0 → 100644
View file @
a37e1465
379 Bytes
src/i18n/locales/zh-CN.ts
View file @
a37e1465
...
@@ -211,6 +211,11 @@ export default {
...
@@ -211,6 +211,11 @@ export default {
changePhoto
:
'修改头像'
,
changePhoto
:
'修改头像'
,
photo
:
'头像'
,
photo
:
'头像'
,
photoTip
:
'*支持jpg,gif,png格式图片,且文件小于2M。'
,
photoTip
:
'*支持jpg,gif,png格式图片,且文件小于2M。'
,
cancel
:
'取消'
,
addPassenger
:
'新增旅客'
,
editPassenger
:
'修改旅客'
,
deleteSuccess
:
'删除成功'
,
idCard
:
'身份证号'
,
},
},
// HTTP 错误状态码
// HTTP 错误状态码
httpError
:
{
httpError
:
{
...
...
src/services/UserService.ts
View file @
a37e1465
...
@@ -705,6 +705,55 @@ class UserService {
...
@@ -705,6 +705,55 @@ class UserService {
)
)
return
response
as
unknown
as
HttpResponse
return
response
as
unknown
as
HttpResponse
}
}
/**
* 旅客列表
* @param tenantId 租户ID(可选)
*/
static
async
memberGuest
(
tenantId
:
string
,
data
:
any
):
Promise
<
HttpResponse
>
{
const
response
=
await
OtaRequest
.
get
(
'/member-guest/paged'
,
data
,
{
headers
:
tenantId
?
{
'__tenant'
:
tenantId
}
:
{}
}
)
return
response
as
unknown
as
HttpResponse
}
/**
* 新增修改旅客
* @param tenantId 租户ID(可选)
*/
static
async
updateMemberGuest
(
tenantId
:
string
,
data
:
any
):
Promise
<
HttpResponse
>
{
const
response
=
await
OtaRequest
.
post
(
'/member-guest/or-update'
,
data
,
{
headers
:
tenantId
?
{
'__tenant'
:
tenantId
}
:
{}
}
)
return
response
as
unknown
as
HttpResponse
}
/**
* 删除旅客
* @param tenantId 租户ID(可选)
*/
static
async
deleteMemberGuest
(
tenantId
:
string
,
id
:
any
):
Promise
<
HttpResponse
>
{
const
response
=
await
OtaRequest
.
delete
(
`/member-guest/
${
id
}
`
,
{},
{
headers
:
tenantId
?
{
'__tenant'
:
tenantId
}
:
{}
}
)
return
response
as
unknown
as
HttpResponse
}
}
}
export
default
UserService
export
default
UserService
src/views/personalCenter/accountCenter.vue
View file @
a37e1465
<
template
>
<
template
>
<div
class=
"w-[977px] h-full flex flex-col flex-shrink-0 overflow-hidden"
>
<div
class=
"w-[977px] h-full flex flex-col flex-shrink-0"
:class=
"[current!=3?'overflow-hidden':'']"
>
<a-spin
:loading=
"loading"
>
<a-spin
:loading=
"loading"
>
<div
class=
"flex"
>
<div
class=
"flex"
>
<div
v-for=
"(item,index) in TitleBars"
<div
v-for=
"(item,index) in TitleBars"
...
@@ -12,49 +13,29 @@
...
@@ -12,49 +13,29 @@
</div>
</div>
</div>
</div>
<a-divider
class=
"!m-[0]"
/>
<a-divider
class=
"!m-[0]"
/>
<a-scrollbar
class=
"max-h-[735px] overflow-auto mt-[20px]"
<a-scrollbar
class=
"max-h-[735px] mt-[20px]"
ref=
"scrollContainer"
>
ref=
"scrollContainer"
:class=
"[current!=3?'overflow-auto':'']"
>
<basicInfor
v-if=
"current==1"
></basicInfor>
<basicInfor
v-if=
"current==1"
></basicInfor>
<account
v-if=
"current==2"
></account>
<account
v-if=
"current==2"
></account>
<passengerList
v-if=
"current==3"
></passengerList>
</a-scrollbar>
</a-scrollbar>
</a-spin>
</a-spin>
</div>
</div>
</
template
>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
setup
lang=
"ts"
>
import
{
ref
,
reactive
,
onMounted
,
watch
}
from
'vue'
import
{
ref
,
onMounted
}
from
'vue'
import
{
useI18n
}
from
'vue-i18n'
import
{
useI18n
}
from
'vue-i18n'
import
{
useUserStore
}
from
'@/stores/user'
import
{
useSystemConfigStore
}
from
'@/stores/index'
import
{
Message
}
from
'@arco-design/web-vue'
import
{
query
}
from
'@/utils/common'
import
{
useRouter
}
from
'vue-router'
import
{
useRouter
}
from
'vue-router'
import
UserService
from
'@/services/UserService'
import
providerTypeEnum
from
'@/utils/providerTypeEnum'
import
account
from
"./components/accountCenter/account.vue"
import
account
from
"./components/accountCenter/account.vue"
import
basicInfor
from
"./components/accountCenter/basicInfor.vue"
import
basicInfor
from
"./components/accountCenter/basicInfor.vue"
import
passengerList
from
"./components/accountCenter/passengerList.vue"
const
{
t
}
=
useI18n
();
const
{
t
}
=
useI18n
();
const
router
=
useRouter
()
const
router
=
useRouter
()
const
{
params
}
=
router
.
currentRoute
.
value
const
{
params
}
=
router
.
currentRoute
.
value
const
userStore
=
useUserStore
()
const
systemConfigStore
=
useSystemConfigStore
()
const
systemConfig
=
reactive
({
tenantId
:
systemConfigStore
.
tenantId
||
null
,
distributorId
:
systemConfigStore
.
distributorId
as
any
,
})
const
loginType
=
ref
(
userStore
.
loginType
)
const
userInfor
=
ref
<
any
>
(
userStore
.
personalInfor
)
const
loading
=
ref
(
true
)
const
loading
=
ref
(
true
)
// 绑定Google账号
const
googleButtonContainer
=
ref
(
null
);
// 绑定账号信息
const
WeChatInfor
=
ref
(
null
as
any
)
const
GoogleInfor
=
ref
(
null
as
any
)
const
LnlineInfor
=
ref
(
null
as
any
)
// 打开微信绑定账号弹窗信息
const
openInfo
=
ref
({}
as
any
)
const
current
=
ref
(
1
)
const
current
=
ref
(
1
)
if
(
params
&&
params
.
type
){
if
(
params
&&
params
.
type
){
...
...
src/views/personalCenter/components/accountCenter/account.vue
View file @
a37e1465
...
@@ -246,7 +246,6 @@ const getAppIdRedirectUri = async () => {
...
@@ -246,7 +246,6 @@ const getAppIdRedirectUri = async () => {
// 获取微信绑定AppID 域名
// 获取微信绑定AppID 域名
const
response
=
await
userStore
.
getUserWechatAppIdAsync
(
systemConfig
.
tenantId
?.
toString
()
||
''
,
providerTypeEnum
.
WECHAT
.
value
)
const
response
=
await
userStore
.
getUserWechatAppIdAsync
(
systemConfig
.
tenantId
?.
toString
()
||
''
,
providerTypeEnum
.
WECHAT
.
value
)
if
(
response
.
status
==
'SUCCESS'
)
{
if
(
response
.
status
==
'SUCCESS'
)
{
return
openInfo
.
value
=
response
.
data
[
0
]
openInfo
.
value
=
response
.
data
[
0
]
const
{
appId
,
redirectUri
}
=
openInfo
.
value
;
const
{
appId
,
redirectUri
}
=
openInfo
.
value
;
const
redirect_url
=
redirectUri
?
redirectUri
:
'https://www.oytour.com/#/login'
const
redirect_url
=
redirectUri
?
redirectUri
:
'https://www.oytour.com/#/login'
...
...
src/views/personalCenter/components/accountCenter/basicInfor.vue
View file @
a37e1465
...
@@ -79,12 +79,26 @@
...
@@ -79,12 +79,26 @@
<a-select
class=
"formData-input !w-[289px] mr-[30px]"
<a-select
class=
"formData-input !w-[289px] mr-[30px]"
v-model=
"formData.residentialArea"
v-model=
"formData.residentialArea"
size=
"large"
size=
"large"
:placeholder=
"t('personal.placeholder')"
>
:placeholder=
"t('personal.placeholder')"
<a-option
v-for=
"item of AreaCodeList"
:value=
"item.phoneCode"
:label=
"item.name"
/>
allow-search
>
<a-option
v-for=
"item of AreaCodeList"
:value=
"item.id"
:label=
"item.name"
/>
</a-select>
</a-select>
</a-form-item>
</a-form-item>
</a-col>
</a-col>
<a-col
:span=
"8"
></a-col>
<a-col
:span=
"8"
></a-col>
<a-col
:span=
"8"
>
<a-form-item
field=
"phoneCode"
:label=
"t('login.phoneCode')"
>
<a-select
class=
"formData-input !w-[289px] mr-[30px]"
v-model=
"formData.phoneCode"
size=
"large"
allow-search
>
<a-option
v-for=
"item of AreaCodeList"
:value=
"item.phoneCode"
:label=
"item.phoneCode"
>
<span>
{{ item.name }}
</span>
<span>
{{ item.phoneCode }}
</span>
</a-option>
</a-select>
</a-form-item>
</a-col>
<a-col
:span=
"8"
>
<a-col
:span=
"8"
>
<a-form-item
field=
"phone"
:label=
"t('login.bindingPhone')"
>
<a-form-item
field=
"phone"
:label=
"t('login.bindingPhone')"
>
<a-input
class=
"formData-input !w-[289px] mr-[30px]"
<a-input
class=
"formData-input !w-[289px] mr-[30px]"
...
@@ -92,7 +106,7 @@
...
@@ -92,7 +106,7 @@
:placeholder=
"t('login.bindingPhoneRequired')"
:placeholder=
"t('login.bindingPhoneRequired')"
size=
"large"
>
size=
"large"
>
<
template
#
prefix
>
<
template
#
prefix
>
<a-dropdown
position=
"br"
trigger
.
stop=
"click"
>
<
!--
<
a-dropdown
position=
"br"
trigger
.
stop=
"click"
>
<div
class=
"flex items-center cursor-pointer"
>
<div
class=
"flex items-center cursor-pointer"
>
<span
class=
"text-[16px] font-bold w-[45px]"
>
{{
formData
.
phoneCode
?
formData
.
phoneCode
:
t
(
'login.phoneCode'
)
}}
</span>
<span
class=
"text-[16px] font-bold w-[45px]"
>
{{
formData
.
phoneCode
?
formData
.
phoneCode
:
t
(
'login.phoneCode'
)
}}
</span>
<icon-down
size=
"16"
strokeLinejoin=
"miter"
/>
<icon-down
size=
"16"
strokeLinejoin=
"miter"
/>
...
@@ -104,13 +118,12 @@
...
@@ -104,13 +118,12 @@
:key=
"option.value"
:key=
"option.value"
@
click
.
stop=
"handleAreaCodeChange(option.phoneCode)"
>
@
click
.
stop=
"handleAreaCodeChange(option.phoneCode)"
>
<div
class=
"flex items-center space-x-3 px-2 py-1"
>
<div
class=
"flex items-center space-x-3 px-2 py-1"
>
<!--
<span
class=
"text-lg"
>
{{
option
.
flag
}}
</span>
-->
<span
class=
"font-medium"
>
{{
option
.
name
}}
</span>
<span
class=
"font-medium"
>
{{
option
.
name
}}
</span>
<span
class=
"text-[#A3A4A0] font-light"
>
(
{{
option
.
phoneCode
}}
)
</span>
<span
class=
"text-[#A3A4A0] font-light"
>
(
{{
option
.
phoneCode
}}
)
</span>
</div>
</div>
</a-doption>
</a-doption>
</
template
>
</
template
>
</a-dropdown>
</a-dropdown>
-->
</template>
</template>
</a-input>
</a-input>
...
@@ -157,8 +170,6 @@ import CountryService from '@/services/CountryService'
...
@@ -157,8 +170,6 @@ import CountryService from '@/services/CountryService'
import
{
useUserStore
}
from
'@/stores/user'
import
{
useUserStore
}
from
'@/stores/user'
import
UploadService
from
'@/services/UploadService'
import
UploadService
from
'@/services/UploadService'
import
type
{
FileItem
}
from
'@arco-design/web-vue'
import
type
{
FileItem
}
from
'@arco-design/web-vue'
import
{
errorMonitor
}
from
"events"
;
const
{
t
}
=
useI18n
();
const
{
t
}
=
useI18n
();
...
@@ -187,12 +198,10 @@ const formData = reactive({
...
@@ -187,12 +198,10 @@ const formData = reactive({
name
:
''
,
//名
name
:
''
,
//名
surName
:
''
,
//姓氏
surName
:
''
,
//姓氏
birthday
:
null
as
any
,
//出生日期
birthday
:
null
as
any
,
//出生日期
isReceivePush
:
null
as
any
,
//勾選「我願意接收優惠與電子報」 1是
lineId
:
null
as
any
,
//LINE ID
phone
:
null
as
any
,
//手机号
phone
:
null
as
any
,
//手机号
phoneCode
:
null
as
any
,
//手机号国家码
phoneCode
:
null
as
any
,
//手机号国家码
photo
:
null
as
any
,
//头像
photo
:
null
as
any
,
//头像
residentialArea
:
null
as
any
,
//
居住地
residentialArea
:
null
as
any
,
//
国籍
sex
:
null
as
any
,
//性别 1男 2女
sex
:
null
as
any
,
//性别 1男 2女
wechatId
:
null
as
any
,
//微信ID
wechatId
:
null
as
any
,
//微信ID
})
})
...
@@ -318,7 +327,10 @@ const initPullDown = () =>{
...
@@ -318,7 +327,10 @@ const initPullDown = () =>{
const
getSimples
=
async
()
=>
{
const
getSimples
=
async
()
=>
{
const
result
=
await
CountryService
.
getSimpleList
(
true
)
const
result
=
await
CountryService
.
getSimpleList
(
true
)
if
(
result
&&
result
.
length
>
0
){
if
(
result
&&
result
.
length
>
0
){
AreaCodeList
.
value
=
result
AreaCodeList
.
value
=
result
.
map
((
item
:
any
)
=>
({
...
item
,
phoneCode
:
item
.
phoneCode
.
indexOf
(
'+'
)
==-
1
?
'+'
+
item
.
phoneCode
:
item
.
phoneCode
,
}))
}
}
}
}
...
...
src/views/personalCenter/components/accountCenter/passengerList.vue
0 → 100644
View file @
a37e1465
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment