Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
quasar-web-base
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
Nguyễn Hải Sơn
quasar-web-base
Commits
1c90e72f
Commit
1c90e72f
authored
Jun 28, 2022
by
Nguyễn Đức Thắng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
8bf9d4eb
Changes
12
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
1997 additions
and
62 deletions
+1997
-62
configurations.example.ts
src/assets/configurations.example.ts
+4
-2
type.ts
src/assets/type.ts
+2
-0
browser-new-artist-dialog.vue
...mponents/artist-information/browser-new-artist-dialog.vue
+990
-0
openDialogRefusedBrowserArtist.vue
...nts/artist-information/openDialogRefusedBrowserArtist.vue
+121
-0
browser-new-customer-dialog.vue
src/components/customer/browser-new-customer-dialog.vue
+1
-3
openDialogRefusedBrowser.vue
src/components/customer/openDialogRefusedBrowser.vue
+45
-56
index.vue
src/components/menu-list/index.vue
+1
-0
updateInformationArtist.ts
...ges/cap-nhat-thong-tin-nghe-sy/updateInformationArtist.ts
+3
-0
index.vue
src/pages/khach-hang-cho-duyet/index.vue
+1
-1
index.vue
src/pages/nghe-si-cho-duyet/index.vue
+822
-0
UserGroup.ts
src/pages/nhom-nguoi-dung/UserGroup.ts
+1
-0
routes.ts
src/router/routes.ts
+6
-0
No files found.
src/assets/configurations.example.ts
View file @
1c90e72f
...
@@ -124,6 +124,8 @@ export enum API_PATHS {
...
@@ -124,6 +124,8 @@ export enum API_PATHS {
getLitCustomerWaiting
=
'customer/listRegister'
,
getLitCustomerWaiting
=
'customer/listRegister'
,
detailCustomerWaiting
=
'customer/detailRegister'
,
detailCustomerWaiting
=
'customer/detailRegister'
,
accountCustomerBrowsing
=
'customer/accountCustomerBrowsing'
,
accountCustomerBrowsing
=
'customer/accountCustomerBrowsing'
,
customerNotBrowsing
=
'customer/customerNotBrowsing'
customerNotBrowsing
=
'customer/customerNotBrowsing'
,
getListRegister
=
'artist/getListRegister'
,
accountArtistBrowsing
=
'customer/accountArtistBrowsing'
,
detailRegisterArtist
=
'artist/detailRegister'
,
}
}
src/assets/type.ts
View file @
1c90e72f
...
@@ -257,6 +257,8 @@ export type DetailUnit = {
...
@@ -257,6 +257,8 @@ export type DetailUnit = {
contracts
:
Array
<
Contract
>
;
contracts
:
Array
<
Contract
>
;
};
};
export
type
CustomerType
=
{
export
type
CustomerType
=
{
id
:
number
;
id
:
number
;
code
:
string
|
null
;
code
:
string
|
null
;
...
...
src/components/artist-information/browser-new-artist-dialog.vue
0 → 100644
View file @
1c90e72f
<
template
>
<div>
<q-dialog
persistent
:model-value=
"showDialogUpdate"
>
<q-card
style=
"min-width: 900px"
bordered
>
<q-form
greedy
@
submit
.
prevent=
"
$emit('saveConfigPartnerInfo',
{});
$emit('click:CloseBtn');
"
>
<q-card-section
style=
"padding: 4px 0 4px 0"
>
<q-item>
<q-item-section>
<q-item-label
class=
"text-h6 text-weight-regular"
>
Duyệt thông tin nghệ sĩ
</q-item-label>
</q-item-section>
</q-item>
</q-card-section>
<q-separator
/>
<q-card-section>
<div
class=
"col-5 q-ml-xl"
>
<div
class=
"row q-mt-sm flex-center"
>
<div
class=
"col-3 text-weight-medium"
></div>
<div
class=
"col-8 flex flex-center"
>
<div>
<q-card
class=
"q-mb-sm"
v-if=
"avatar !== null"
>
<q-img
@
click=
"uploadBanner"
:src=
"avatar"
style=
"height: 263px; width: 195px; cursor: pointer"
></q-img>
<q-icon
name=
"mdi-close-circle"
color=
"red"
style=
"
position: absolute;
right: 0;
font-size: 18px;
cursor: pointer;
"
@
click=
"deleteAvatar"
></q-icon>
</q-card>
<div
@
click=
"uploadBanner"
v-else
class=
"q-mb-sm"
style=
"
height: 263px;
width: 195px;
border: 2px dashed #5d319e;
border-radius: 4px;
cursor: pointer;
"
>
<div
style=
"
height: 100%;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
"
>
<q-icon
style=
"color: #5d319e"
name=
"mdi-cloud-upload"
size=
"xl"
></q-icon>
Tải ảnh lên
</div>
</div>
<div>
<input
ref=
"upload"
hidden
type=
"file"
accept=
"image/png, image/jpeg"
@
change=
"selectedFile($event.target.files)"
/>
</div>
<!--
<div
v-if=
"hidden_img"
style=
"color: #c10015; font-size: 12px"
>
Vui lòng chọn ảnh
</div>
-->
</div>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
<div>
Tên đăng nhập
<span
style=
"color: red"
>
*
</span></div>
</div>
<div
class=
"col-8"
>
<q-input
v-if=
"id"
:model-value=
"account"
@
update:model-value=
"$emit('update:account', $event)"
readonly
class=
"q-my-sm"
dense
hide-bottom-space
outlined
></q-input>
<q-input
v-else
:model-value=
"account"
@
update:model-value=
"$emit('update:account', $event)"
:error=
"accountRules"
:error-message=
"errorMessAccount"
class=
"q-my-sm"
dense
hide-bottom-space
outlined
></q-input>
</div>
</div>
<!--
<div
class=
"col-auto"
style=
"margin-top: 2px"
>
<q-btn
color=
"primary"
no-caps
label=
"Reset Pass"
></q-btn>
</div>
-->
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t
(
'artist.artistInformation.titleDataField.artistCode'
)
}}
<span
style=
"color: red"
>
*
</span>
</div>
<div
class=
"col-8"
>
<q-input
:model-value=
"artistCode"
@
update:model-value=
"$emit('update:artistCode', $event)"
:error=
"artistCodeRules"
:error-message=
"errorMessArtistCode"
class=
"q-my-sm"
outlined
dense
hide-bottom-space
></q-input>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t
(
'artist.artistInformation.titleDataField.fullName'
)
}}
<span
style=
"color: red"
>
*
</span>
</div>
<div
class=
"col-8"
>
<q-input
:model-value=
"fullName"
@
update:model-value=
"$emit('update:fullName', $event)"
:error=
"fullNameRules"
:error-message=
"errorMessFullName"
class=
"q-my-sm"
outlined
dense
hide-bottom-space
></q-input>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t
(
'artist.artistInformation.titleDataField.artistName'
)
}}
<!--
<span
style=
"color: red"
>
*
</span>
-->
</div>
<div
class=
"col-8"
>
<!-- :error-message="errorMessArtistName" -->
<!-- :error="artistNameRules" -->
<q-input
:model-value=
"artistName"
@
update:model-value=
"$emit('update:artistName', $event)"
class=
"q-my-sm"
outlined
dense
hide-bottom-space
></q-input>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t
(
'artist.artistInformation.titleDataField.birthday'
)
}}
</div>
<div
class=
"col-8"
>
<q-input
:model-value=
"birthday"
@
update:model-value=
"$emit('update:birthday', $event)"
class=
"q-my-sm"
outlined
@
click=
"openDialog = true"
dense
hide-bottom-space
>
<template
v-slot:default
>
<q-dialog
ref=
"dialogRef"
v-model=
"openDialog"
>
<q-card
class=
"q-dialog-plugin"
>
<q-date
style=
"width: 100%"
v-model=
"BirthdayDatePicker"
first-day-of-week=
"1"
></q-date>
<q-card-actions
align=
"right"
>
<q-btn
color=
"primary"
label=
"Cancel"
@
click=
"onCancelClick"
/>
<q-btn
color=
"primary"
label=
"OK"
@
click=
"onOKClick"
/>
</q-card-actions>
</q-card>
</q-dialog>
</
template
>
</q-input>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{ $t('artist.artistInformation.titleDataField.sex') }}
</div>
<div
class=
"col-8"
>
<q-select
:model-value=
"sex"
@
update:model-value=
"$emit('update:sex', $event)"
:options=
"sexOptions"
emit-value
map-options
option-value=
"id"
option-label=
"name"
type=
"text"
class=
"q-my-sm"
outlined
hide-bottom-space
clearable
dense
></q-select>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t('artist.artistInformation.titleDataField.nationality')
}}
</div>
<div
class=
"col-8"
>
<q-select
:model-value=
"nationality"
@
update:model-value=
"$emit('update:nationality', $event)"
:options=
"nationalityOptions"
map-options
option-value=
"id"
option-label=
"name"
type=
"text"
class=
"q-my-sm"
outlined
hide-bottom-space
dense
></q-select>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{ $t('artist.artistInformation.titleDataField.address') }}
</div>
<div
class=
"col-8"
>
<q-select
:model-value=
"address"
@
update:model-value=
"$emit('update:address', $event)"
:options=
"provinceOptions1"
option-value=
"fullName"
option-label=
"fullName"
type=
"text"
class=
"q-my-sm"
outlined
hide-bottom-space
clearable
dense
use-input
input-debounce=
"0"
map-options
@
filter=
"filterFn"
>
<
template
v-slot:no-option
>
<q-item>
<q-item-section
class=
"text-grey"
>
Không có dữ liệu
</q-item-section>
</q-item>
</
template
>
</q-select>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{ $t('artist.artistInformation.titleDataField.field') }}
</div>
<div
class=
"col-8"
>
<q-select
:model-value=
"fields"
@
update:model-value=
"$emit('update:fields', $event)"
:options=
"fieldOptions"
multiple
map-options
option-value=
"id"
option-label=
"name"
type=
"text"
class=
"q-my-sm"
outlined
hide-bottom-space
clearable
dense
use-input
use-chips
></q-select>
</div>
</div>
<!-- thể loại -->
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{ $t('artist.artistInformation.titleDataField.type') }}
</div>
<div
class=
"col-8"
>
<q-select
:model-value=
"musics"
@
update:model-value=
"$emit('update:musics', $event)"
:options=
"musicOptions"
multiple
map-options
option-value=
"id"
option-label=
"name"
type=
"text"
class=
"q-my-sm"
outlined
hide-bottom-space
clearable
dense
use-input
use-chips
></q-select>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{ $t('artist.artistInformation.titleDataField.work') }}
</div>
<div
class=
"col-8"
>
<q-select
:model-value=
"works"
@
update:model-value=
"$emit('update:works', $event)"
:options=
"workOptions"
map-options
option-value=
"id"
option-label=
"name"
type=
"text"
class=
"q-my-sm"
outlined
hide-bottom-space
clearable
dense
multiple
use-input
use-chips
></q-select>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t('artist.artistInformation.titleDataField.qualification')
}}
</div>
<div
class=
"col-8"
>
<q-select
:model-value=
"qualification"
@
update:model-value=
"$emit('update:qualification', $event)"
:options=
"professionOptions"
map-options
option-value=
"id"
option-label=
"name"
type=
"text"
class=
"q-my-sm"
outlined
hide-bottom-space
clearable
dense
></q-select>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t('artist.artistInformation.titleDataField.favoriteScore')
}}
</div>
<div
class=
"col-8"
>
<q-input
:model-value=
"favoriteScore"
@
update:model-value=
"$emit('update:favoriteScore', $event)"
mask=
"#############"
class=
"q-my-sm"
outlined
dense
hide-bottom-space
></q-input>
</div>
</div>
</div>
<div
class=
"col-5 q-ml-xl"
>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t('artist.artistInformation.titleDataField.phoneNumber')
}}
</div>
<div
class=
"col-8"
>
<q-input
:model-value=
"phoneNumber"
@
update:model-value=
"$emit('update:phoneNumber', $event)"
mask=
"##########"
class=
"q-my-sm"
outlined
dense
hide-bottom-space
></q-input>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{ $t('artist.artistInformation.titleDataField.email') }}
<!-- <span style="color: red">*</span> -->
</div>
<div
class=
"col-8"
>
<!-- :error="emailRules"
:error-message="errorMessEmail" -->
<q-input
:model-value=
"email"
@
update:model-value=
"$emit('update:email', $event)"
outlined
class=
"q-my-sm"
dense
hide-bottom-space
></q-input>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{ $t('artist.artistInformation.titleDataField.facebook') }}
</div>
<div
class=
"col-8"
>
<q-input
:model-value=
"facebook"
@
update:model-value=
"$emit('update:facebook', $event)"
outlined
class=
"q-my-sm"
dense
></q-input>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t(
'artist.artistInformation.titleDataField.facebookMessage'
)
}}
</div>
<div
class=
"col-8"
>
<q-input
:model-value=
"facebookMessage"
@
update:model-value=
"
$emit('update:facebookMessage', $event)
"
outlined
class=
"q-my-sm"
dense
></q-input>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{ $t('artist.artistInformation.titleDataField.instagram') }}
</div>
<div
class=
"col-8"
>
<q-input
:model-value=
"instagram"
@
update:model-value=
"$emit('update:instagram', $event)"
outlined
class=
"q-my-sm"
dense
></q-input>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{ $t('artist.artistInformation.titleDataField.whatsapp') }}
</div>
<div
class=
"col-8"
>
<q-input
:model-value=
"whatsapp"
@
update:model-value=
"$emit('update:whatsapp', $event)"
outlined
class=
"q-my-sm"
dense
></q-input>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t('artist.artistInformation.titleDataField.userAdminister')
}}
</div>
<div
class=
"col-8"
>
<q-input
:model-value=
"mnName"
@
update:model-value=
"$emit('update:mnName', $event)"
class=
"q-my-sm"
outlined
dense
></q-input>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t(
'artist.artistInformation.titleDataField.phoneNumberAdminister'
)
}}
</div>
<div
class=
"col-8"
>
<q-input
:model-value=
"mnPhone"
@
update:model-value=
"$emit('update:mnPhone', $event)"
mask=
"##########"
class=
"q-my-sm"
outlined
dense
></q-input>
</div>
</div>
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t(
'artist.artistInformation.titleDataField.emailAdminister'
)
}}
</div>
<div
class=
"col-8"
>
<q-input
:model-value=
"mnEmail"
@
update:model-value=
"$emit('update:mnEmail', $event)"
outlined
class=
"q-my-sm"
dense
></q-input>
</div>
</div>
<!-- check_infoBooking -->
<div
class=
"row flex-center"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t('artist.artistInformation.titleDataField.infoBooking')
}}
</div>
<div
class=
"col-8"
>
<q-checkbox
v-model=
"check_infoBooking"
@
update:model-value=
"
$emit('update:check_infoBooking', $event)
"
class=
"q-my-sm"
></q-checkbox>
</div>
</div>
<div
class=
"row flex-center"
v-if=
"check_infoBooking"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t(
'artist.artistInformation.titleDataField.phoneNumberBooking'
)
}}
<!-- <span style="color: red">*</span> -->
</div>
<div
class=
"col-8"
>
<!-- :error="mnBookingPhoneRules"
:error-message="errorMessmnBookingPhone" -->
<q-input
:model-value=
"mnBookingPhone"
@
update:model-value=
"$emit('update:mnBookingPhone', $event)"
mask=
"##########"
class=
"q-my-sm"
outlined
dense
hide-bottom-space
></q-input>
</div>
</div>
<div
class=
"row flex-center"
v-if=
"check_infoBooking"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t('artist.artistInformation.titleDataField.emailBooking')
}}
<!-- <span style="color: red">*</span> -->
</div>
<div
class=
"col-8"
>
<!-- :error="mnBookingEmailRules"
:error-message="errorMessmnBookingEmail" -->
<q-input
:model-value=
"mnBookingEmail"
@
update:model-value=
"$emit('update:mnBookingEmail', $event)"
outlined
class=
"q-my-sm"
dense
hide-bottom-space
></q-input>
</div>
</div>
<div
class=
"row flex-center"
v-if=
"check_infoBooking"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t(
'artist.artistInformation.titleDataField.facebookMessageBooking'
)
}}
</div>
<div
class=
"col-8"
>
<q-input
:model-value=
"mnFbmess"
@
update:model-value=
"$emit('update:mnFbmess', $event)"
outlined
class=
"q-my-sm"
dense
></q-input>
</div>
</div>
<div
class=
"row flex-center"
v-if=
"check_infoBooking"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t(
'artist.artistInformation.titleDataField.instagramBooking'
)
}}
</div>
<div
class=
"col-8"
>
<q-input
:model-value=
"mnIns"
@
update:model-value=
"$emit('update:mnIns', $event)"
outlined
class=
"q-my-sm"
dense
></q-input>
</div>
</div>
<div
class=
"row flex-center"
v-if=
"check_infoBooking"
>
<div
class=
"col-3 text-weight-medium"
>
{{
$t(
'artist.artistInformation.titleDataField.whatsappBooking'
)
}}
</div>
<div
class=
"col-8"
>
<q-input
:model-value=
"mnWhatsapp"
@
update:model-value=
"$emit('update:mnWhatsapp', $event)"
outlined
class=
"q-my-sm"
dense
></q-input>
</div>
</div>
</div>
</q-card-section>
<q-card-actions
align=
"right"
>
<div>
<q-btn
color=
"grey"
no-caps
style=
"width: 90px"
class=
"q-mr-sm"
:label=
"$t('banner.crudActions.cancel')"
@
click=
"$emit('click:CloseBtn')"
/>
<q-btn
type=
"submit"
color=
"primary"
no-caps
style=
"width: 90px"
:label=
"$t('configPartner.crudActions.save')"
/>
</div>
</q-card-actions>
</q-form>
</q-card>
</q-dialog>
</div>
</template>
<
script
lang=
"ts"
>
import
{
defineComponent
,
onMounted
,
PropType
,
ref
,
Ref
}
from
'vue'
;
import
{
i18n
}
from
'src/boot/i18n'
;
// import UploadImage from '../../upload-image/index.vue';
import
moment
from
'moment'
;
import
{
FieldType
,
NationalityType
}
from
'src/assets/type'
;
import
{
API_PATHS
,
config
}
from
'src/assets/configurations.example'
;
import
{
api
,
BaseResponseBody
}
from
'src/boot/axios'
;
import
{
AxiosResponse
}
from
'axios'
;
import
{
ProvinceType
}
from
'src/assets/type'
;
export
default
defineComponent
({
props
:
{
mnBookingPhone
:
{
type
:
String
,
required
:
true
},
mnBookingEmail
:
{
type
:
String
,
required
:
true
},
mnFbmess
:
{
type
:
String
,
required
:
true
},
mnIns
:
{
type
:
String
,
required
:
true
},
mnWhatsapp
:
{
type
:
String
,
required
:
true
},
mnName
:
{
type
:
String
,
required
:
true
},
mnPhone
:
{
type
:
String
,
required
:
true
},
mnEmail
:
{
type
:
String
,
required
:
true
},
hidden_img
:
{
type
:
Boolean
,
required
:
true
},
id
:
{
type
:
Number
,
required
:
true
},
artistCode
:
{
type
:
String
,
required
:
true
},
avatar
:
{
type
:
String
,
required
:
true
},
fullName
:
{
type
:
String
,
required
:
true
},
artistName
:
{
type
:
String
,
required
:
true
},
birthday
:
{
type
:
String
,
required
:
true
},
sex
:
{
type
:
Number
,
required
:
true
},
nationality
:
{
type
:
Object
as
PropType
<
NationalityType
>
,
required
:
true
},
status
:
{
type
:
Number
,
required
:
true
},
address
:
{
type
:
String
,
required
:
true
},
fields
:
{
type
:
Object
as
PropType
<
FieldType
>
,
required
:
true
},
musics
:
{
type
:
String
,
required
:
true
},
works
:
{
type
:
Number
,
required
:
true
},
qualification
:
{
type
:
Number
,
required
:
true
},
artistLevel
:
{
type
:
Number
,
required
:
true
},
phoneNumber
:
{
type
:
String
,
required
:
true
},
email
:
{
type
:
String
,
required
:
true
},
phoneNumberAdminister
:
{
type
:
String
,
required
:
true
},
emailAdminister
:
{
type
:
String
,
required
:
true
},
facebook
:
{
type
:
String
,
required
:
true
},
facebookMessage
:
{
type
:
String
,
required
:
true
},
instagram
:
{
type
:
String
,
required
:
true
},
whatsapp
:
{
type
:
String
,
required
:
true
},
sexOptions
:
{
type
:
Array
,
required
:
true
},
fieldOptions
:
{
type
:
Array
,
required
:
true
},
nationalityOptions
:
{
type
:
Array
,
required
:
true
},
professionOptions
:
{
type
:
Array
,
required
:
true
},
artistLevelOptions
:
{
type
:
Array
,
required
:
true
},
workOptions
:
{
type
:
Array
,
required
:
true
},
musicOptions
:
{
type
:
Array
,
required
:
true
},
favoriteScore
:
{
type
:
Number
,
required
:
true
},
artistCodeRules
:
{
type
:
Boolean
,
required
:
true
},
fullNameRules
:
{
type
:
Boolean
,
required
:
true
},
// artistNameRules: { type: Boolean, required: true },
// birthdayRules: { type: Boolean, required: true },
// emailRules: { type: Boolean, required: true },
emailAdministerRules
:
{
type
:
Boolean
,
required
:
true
},
phoneNumberAdministerRules
:
{
type
:
Boolean
,
required
:
true
},
// addressRules: { type: Boolean, required: true },
account
:
{
type
:
String
,
required
:
true
},
accountRules
:
{
type
:
Boolean
,
required
:
true
},
// phoneNumberRules: { type: Boolean, required: true },
// sexRules: { type: Boolean, required: true },
// nationalityRules: { type: Boolean, required: true },
// fieldRules: { type: Boolean, required: true },
// musicsRules: { type: Boolean, required: true },
// workRules: { type: Boolean, required: true },
// qualificationRules: { type: Boolean, required: true },
artistLevelRules
:
{
type
:
Boolean
,
required
:
true
},
// errorMessPhoneNumber: { type: String, required: true },
// errorMessEmail: { type: String, required: true },
// errorMessmnBookingPhone: { type: String, required: true },
// errorMessmnBookingEmail: { type: String, required: true },
// mnBookingEmailRules: { type: Boolean, required: true },
// mnBookingPhoneRules: { type: Boolean, required: true },
// options: { type: String, required: true },
provinceOptions
:
{
type
:
Array
,
required
:
true
},
showDialogUpdate
:
{
type
:
Boolean
,
required
:
true
,
},
},
// components: {
// UploadImage,
// },
setup
(
_
,
context
)
{
const
BirthdayDatePicker
=
ref
(
moment
().
format
(
'YYYY/MM/DD'
));
const
selectedFile
=
(
value
:
FileList
)
=>
{
if
(
value
.
length
!==
0
)
{
context
.
emit
(
'SetAvatar'
,
{
file
:
value
[
0
],
url
:
URL
.
createObjectURL
(
value
[
0
]),
});
context
.
emit
(
'update:hidden_img'
,
false
);
}
};
const
provinceOptions1
:
Ref
<
ProvinceType
[]
>
=
ref
([]);
const
getProvinceOptions
=
async
()
=>
{
const
response
=
(
await
api
({
url
:
API_PATHS
.
getProvinceOptions
,
method
:
'GET'
,
params
:
{},
}))
as
AxiosResponse
<
BaseResponseBody
<
ProvinceType
[]
>>
;
if
(
response
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
provinceOptions1
.
value
=
response
.
data
.
data
;
}
};
const
options
=
ref
(
provinceOptions1
);
const
filterFn
=
(
val
:
string
,
update
:
(
fn
:
()
=>
void
)
=>
void
)
=>
{
if
(
!
val
)
{
update
(()
=>
{
options
.
value
=
[...
provinceOptions1
.
value
];
});
return
;
}
else
{
update
(()
=>
{
const
needle
=
val
.
toLowerCase
();
options
.
value
=
provinceOptions1
.
value
.
filter
(
(
v
:
{
name
:
string
})
=>
v
.
name
.
toLowerCase
().
indexOf
(
needle
)
>
1
);
});
}
};
const
upload
=
ref
(
null
);
const
uploadBanner
=
()
=>
{
// eslint-disable-next-line
// @ts-ignore
// eslint-disable-next-line
upload
.
value
?.
click
();
};
const
deleteAvatar
=
()
=>
{
context
.
emit
(
'deleteAvatar'
);
};
const
formatDatePicker
=
(
value
:
string
)
=>
{
return
moment
(
value
).
format
(
'DD/MM/YYYY'
);
};
const
selectDatePicker
=
(
value
:
string
)
=>
{
context
.
emit
(
'UpdateBirtday'
,
formatDatePicker
(
value
));
};
const
openDialog
:
Ref
<
boolean
>
=
ref
(
false
);
const
onOKClick
=
()
=>
{
selectDatePicker
(
BirthdayDatePicker
.
value
);
openDialog
.
value
=
false
;
};
const
onCancelClick
=
()
=>
{
openDialog
.
value
=
false
;
};
const
errorMessAccount
=
i18n
.
global
.
t
(
'artist.artistInformation.validateMessages.requireAccount'
);
const
errorMessArtistCode
=
i18n
.
global
.
t
(
'artist.artistInformation.validateMessages.requireArtistCode'
);
const
errorMessFullName
=
i18n
.
global
.
t
(
'artist.artistInformation.validateMessages.requireFullName'
);
// const errorMessArtistName = i18n.global.t(
// 'artist.artistInformation.validateMessages.requireArtistName'
// );
// const errorMessBirthday = i18n.global.t(
// 'artist.artistInformation.validateMessages.requireBirthday'
// );
// const errorMessSex = i18n.global.t(
// 'artist.artistInformation.validateMessages.requireSex'
// );
// const errorMessNationality = i18n.global.t(
// 'artist.artistInformation.validateMessages.requireNationality'
// );
// const errorMessAddress = i18n.global.t(
// 'artist.artistInformation.validateMessages.requireAddress'
// );
// const errorMessFields = i18n.global.t(
// 'artist.artistInformation.validateMessages.requireField'
// );
const
errorMessWorks
=
i18n
.
global
.
t
(
'artist.artistInformation.validateMessages.requiredWork'
);
// const errorMessQualification = i18n.global.t(
// 'artist.artistInformation.validateMessages.requireQualification'
// );
const
errorMessArtistLevel
=
i18n
.
global
.
t
(
'artist.artistInformation.validateMessages.requireArtistLevel'
);
onMounted
(()
=>
{
void
getProvinceOptions
();
});
return
{
check_infoBooking
:
ref
(
false
),
upload
,
uploadBanner
,
filterFn
,
selectedFile
,
deleteAvatar
,
BirthdayDatePicker
,
selectDatePicker
,
formatDatePicker
,
openDialog
,
onOKClick
,
onCancelClick
,
errorMessArtistCode
,
errorMessFullName
,
errorMessAccount
,
// errorMessArtistName,
// errorMessBirthday,
// errorMessSex,
// errorMessNationality,
// errorMessAddress,
// errorMessFields,
errorMessWorks
,
// errorMessQualification,
errorMessArtistLevel
,
provinceOptions1
,
options
,
// filterArrayOrganizational,
getProvinceOptions
,
};
},
emits
:
[
'update:emailAdminister'
,
'update:phoneNumberAdminister'
,
'update:artistCode'
,
'update:fullName'
,
'update:avatar'
,
'update:artistName'
,
'update:birthday'
,
'update:email'
,
'update:facebook'
,
'update:facebookMessage'
,
'update:instagram'
,
'update:whatsapp'
,
'update:address'
,
'update:phoneNumber'
,
'update:sex'
,
'update:nationality'
,
'update:fields'
,
'update:works'
,
'update:favoriteScore'
,
'update:check_infoBooking'
,
'update:qualification'
,
'update:artistLevel'
,
'update:hidden_img'
,
'update:status'
,
'update:mnName'
,
'update:mnPhone'
,
'update:mnEmail'
,
'update:mnBookingPhone'
,
'update:mnBookingEmail'
,
'update:mnFbmess'
,
'update:mnIns'
,
'update:mnWhatsapp'
,
'update:musics'
,
'update:account'
,
'addNewArtist'
,
'SetAvatar'
,
'deleteAvatar'
,
'UpdateBirtday'
,
'saveConfigPartnerInfo'
,
'update:showDialogUpdate'
,
'click:CloseBtn'
,
],
});
</
script
>
src/components/artist-information/openDialogRefusedBrowserArtist.vue
0 → 100644
View file @
1c90e72f
<
template
>
<q-dialog
persistent
:model-value=
"openDialogRefusedBrowser"
>
<q-card
style=
"min-width: 900px"
bordered
>
<q-form
greedy
@
submit
.
prevent=
"confirmRefusedCustomer"
>
<q-card-section
style=
"padding-bottom:10px"
>
<q-item
style=
"padding-left: 10px"
>
<q-item-section>
<q-item-label
class=
"text-h6 text-weight-regular"
>
Lý do
</q-item-label>
</q-item-section>
</q-item>
</q-card-section>
<q-card-section
style=
"padding-top:0px"
>
<q-input
outlined
hide-bottom-space
:rules=
"contentRules"
v-model=
"content"
label=
"Nội dung"
type=
"textarea"
/>
</q-card-section>
<q-card-actions
align=
"right"
>
<q-btn
color=
"grey"
no-caps
style=
"width: 90px"
label=
"Hủy"
@
click=
"$emit('click:CloseBtn')"
/>
<q-btn
type=
"submit"
color=
"primary"
no-caps
style=
"width: 90px"
label=
"Ok"
/>
</q-card-actions>
</q-form>
</q-card>
</q-dialog>
</
template
>
<
script
lang=
"ts"
>
import
{
defineComponent
,
PropType
,
Ref
,
ref
,
watch
}
from
'vue'
;
import
{
Dialog
,
Notify
}
from
'quasar'
;
import
{
API_PATHS
,
config
}
from
'src/assets/configurations.example'
;
import
{
AxiosResponse
}
from
'axios'
;
import
{
api
,
BaseResponseBody
}
from
'src/boot/axios'
;
import
{
emit
}
from
'cluster'
;
export
default
defineComponent
({
props
:
{
openDialogRefusedBrowser
:
{
type
:
Boolean
,
required
:
true
,
},
artistId
:
{
type
:
Number
,
required
:
true
}
},
setup
(
props
,
context
){
watch
(
()
=>
props
.
openDialogRefusedBrowser
,
(
value
)
=>
{
if
(
value
)
{
content
.
value
=
null
}
}
);
const
content
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
contentRules
=
[
(
val
?:
string
)
=>
(
val
&&
val
.
trim
().
length
)
||
'Vui lòng nhập nội dung'
];
const
confirmRefusedCustomer
=
async
()
=>
{
try
{
const
browserResult
=
(
await
api
({
url
:
API_PATHS
.
customerNotBrowsing
,
method
:
'POST'
,
data
:
{
id
:
props
.
artistId
,
isCustomer
:
2
,
approvalStatus
:
2
,
reason
:
content
.
value
},
}))
as
AxiosResponse
<
BaseResponseBody
<
unknown
>>
;
if
(
browserResult
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
Notify
.
create
({
type
:
'positive'
,
message
:
'Từ chối duyệt thành công'
,
actions
:
[{
icon
:
'close'
,
color
:
'white'
}],
});
context
.
emit
(
'editReCustomer'
)
context
.
emit
(
'click:CloseBtn'
)
}
}
catch
(
error
)
{}
}
return
{
contentRules
,
content
,
confirmRefusedCustomer
}
},
emits
:[
'click:CloseBtn'
,
'editReCustomer'
]
})
</
script
>
\ No newline at end of file
src/components/customer/browser-new-customer-dialog.vue
View file @
1c90e72f
...
@@ -11,9 +11,7 @@
...
@@ -11,9 +11,7 @@
<q-card-section>
<q-card-section>
<q-item>
<q-item>
<q-item-section>
<q-item-section>
<q-item-label
class=
"text-h6 text-weight-regular"
>
{{
<q-item-label
class=
"text-h6 text-weight-regular"
>
Duyệt thông tin khách hàng
</q-item-label>
$t
(
'customer.dialogLabel.title.editCustomer'
)
}}
</q-item-label>
</q-item-section>
</q-item-section>
</q-item>
</q-item>
</q-card-section>
</q-card-section>
...
...
src/components/customer/openDialogRefusedBrowser.vue
View file @
1c90e72f
<
template
>
<
template
>
<q-dialog
persistent
<q-dialog
persistent
:model-value=
"openDialogRefusedBrowser"
>
:model-value=
"openDialogRefusedBrowser"
<q-card
style=
"min-width: 900px"
bordered
>
>
<q-form
greedy
@
submit
.
prevent=
"confirmRefusedCustomer"
>
<q-card
style=
"min-width: 900px"
bordered
>
<q-card-section
style=
"padding-bottom: 10px"
>
<q-form
greedy
@
submit
.
prevent=
"confirmRefusedCustomer"
>
<q-card-section
style=
"padding-bottom:10px"
>
<q-item
style=
"padding-left: 10px"
>
<q-item
style=
"padding-left: 10px"
>
<q-item-section>
<q-item-section>
<q-item-label
class=
"text-h6 text-weight-regular"
>
Lý do
</q-item-label>
<q-item-label
class=
"text-h6 text-weight-regular"
>
Lý do
</q-item-label
>
</q-item-section>
</q-item-section>
</q-item>
</q-item>
</q-card-section>
</q-card-section>
<q-card-section
style=
"padding-top:0px"
>
<q-card-section
style=
"padding-top: 0px"
>
<q-input
outlined
<q-input
hide-bottom-space
outlined
:rules=
"contentRules"
hide-bottom-space
v-model=
"content"
:rules=
"contentRules"
label=
"Nội dung"
v-model=
"content"
type=
"textarea"
/>
label=
"Nội dung"
type=
"textarea"
/>
</q-card-section>
</q-card-section>
<q-card-actions
align=
"right"
>
<q-card-actions
align=
"right"
>
<q-btn
<q-btn
...
@@ -28,8 +28,7 @@
...
@@ -28,8 +28,7 @@
no-caps
no-caps
style=
"width: 90px"
style=
"width: 90px"
label=
"Hủy"
label=
"Hủy"
@
click=
"$emit('click:CloseBtn')"
@
click=
"$emit('click:CloseBtn')"
/>
/>
<q-btn
<q-btn
type=
"submit"
type=
"submit"
...
@@ -37,12 +36,11 @@
...
@@ -37,12 +36,11 @@
no-caps
no-caps
style=
"width: 90px"
style=
"width: 90px"
label=
"Ok"
label=
"Ok"
/>
/>
</q-card-actions>
</q-card-actions>
</q-form>
</q-form>
</q-card>
</q-card>
</q-dialog>
</q-dialog>
</
template
>
</
template
>
<
script
lang=
"ts"
>
<
script
lang=
"ts"
>
...
@@ -52,44 +50,41 @@ import { API_PATHS, config } from 'src/assets/configurations.example';
...
@@ -52,44 +50,41 @@ import { API_PATHS, config } from 'src/assets/configurations.example';
import
{
AxiosResponse
}
from
'axios'
;
import
{
AxiosResponse
}
from
'axios'
;
import
{
api
,
BaseResponseBody
}
from
'src/boot/axios'
;
import
{
api
,
BaseResponseBody
}
from
'src/boot/axios'
;
import
{
emit
}
from
'cluster'
;
import
{
emit
}
from
'cluster'
;
export
default
defineComponent
({
export
default
defineComponent
({
props
:
{
props
:
{
openDialogRefusedBrowser
:
{
openDialogRefusedBrowser
:
{
type
:
Boolean
,
type
:
Boolean
,
required
:
true
,
required
:
true
,
},
},
customerId
:
{
customerId
:
{
type
:
Number
,
type
:
Number
,
required
:
true
required
:
true
,
}
}
,
},
},
setup
(
props
,
context
){
setup
(
props
,
context
)
{
watch
(
watch
(
()
=>
props
.
openDialogRefusedBrowser
,
()
=>
props
.
openDialogRefusedBrowser
,
(
value
)
=>
{
(
value
)
=>
{
if
(
value
)
{
if
(
value
)
{
content
.
value
=
null
content
.
value
=
null
;
}
}
}
}
);
);
const
content
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
content
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
contentRules
=
[
const
contentRules
=
[
(
val
?:
string
)
=>
(
val
?:
string
)
=>
(
val
&&
val
.
trim
().
length
)
||
'Vui lòng nhập nội dung'
,
(
val
&&
val
.
trim
().
length
)
||
'Vui lòng nhập nội dung'
];
];
const
confirmRefusedCustomer
=
async
()
=>
{
const
confirmRefusedCustomer
=
async
()
=>
{
try
{
try
{
const
browserResult
=
(
await
api
({
const
browserResult
=
(
await
api
({
url
:
API_PATHS
.
customerNotBrowsing
,
url
:
API_PATHS
.
customerNotBrowsing
,
method
:
'POST'
,
method
:
'POST'
,
data
:
{
data
:
{
id
:
props
.
customerId
,
id
:
props
.
customerId
,
isCustomer
:
1
,
isCustomer
:
1
,
approvalStatus
:
0
,
approvalStatus
:
2
,
reason
:
content
.
value
reason
:
content
.
value
,
},
},
}))
as
AxiosResponse
<
BaseResponseBody
<
unknown
>>
;
}))
as
AxiosResponse
<
BaseResponseBody
<
unknown
>>
;
if
(
browserResult
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
if
(
browserResult
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
...
@@ -99,23 +94,17 @@ const content: Ref<string | null> = ref(null);
...
@@ -99,23 +94,17 @@ const content: Ref<string | null> = ref(null);
actions
:
[{
icon
:
'close'
,
color
:
'white'
}],
actions
:
[{
icon
:
'close'
,
color
:
'white'
}],
});
});
context
.
emit
(
'editReCustomer'
)
context
.
emit
(
'editReCustomer'
);
context
.
emit
(
'click:CloseBtn'
)
context
.
emit
(
'click:CloseBtn'
);
}
}
}
catch
(
error
)
{}
}
catch
(
error
)
{}
};
}
return
{
return
{
contentRules
,
contentRules
,
content
,
content
,
confirmRefusedCustomer
confirmRefusedCustomer
,
}
};
},
},
emits
:[
'click:CloseBtn'
,
'editReCustomer'
]
emits
:
[
'click:CloseBtn'
,
'editReCustomer'
],
});
})
</
script
>
</
script
>
\ No newline at end of file
src/components/menu-list/index.vue
View file @
1c90e72f
<
template
>
<
template
>
<q-list>
<q-list>
<MenuItemComponent
<MenuItemComponent
v-for=
"(menuItem, menuItemIdx) in $store.state.authentication.menuList"
v-for=
"(menuItem, menuItemIdx) in $store.state.authentication.menuList"
:key=
"`menu-item-$
{menuItemIdx}-${menuItem.id}`"
:key=
"`menu-item-$
{menuItemIdx}-${menuItem.id}`"
...
...
src/pages/cap-nhat-thong-tin-nghe-sy/updateInformationArtist.ts
View file @
1c90e72f
...
@@ -80,6 +80,9 @@ export default defineComponent({
...
@@ -80,6 +80,9 @@ export default defineComponent({
const
artistLevelOptions
:
Ref
<
ArtistLevelType
[]
>
=
ref
([]);
const
artistLevelOptions
:
Ref
<
ArtistLevelType
[]
>
=
ref
([]);
const
cardBankOptions
:
Ref
<
CardBankType
[]
>
=
ref
([]);
const
cardBankOptions
:
Ref
<
CardBankType
[]
>
=
ref
([]);
const
typeBankOptions
:
Ref
<
TypeCardType
[]
>
=
ref
([]);
const
typeBankOptions
:
Ref
<
TypeCardType
[]
>
=
ref
([]);
const
workOptions
:
Ref
<
WorkType
[]
>
=
ref
([]);
const
workOptions
:
Ref
<
WorkType
[]
>
=
ref
([]);
const
musicOptions
:
Ref
<
MusicType
[]
>
=
ref
([]);
const
musicOptions
:
Ref
<
MusicType
[]
>
=
ref
([]);
const
sexOptions
=
ref
([
const
sexOptions
=
ref
([
...
...
src/pages/khach-hang-cho-duyet/index.vue
View file @
1c90e72f
...
@@ -525,7 +525,7 @@ export default defineComponent({
...
@@ -525,7 +525,7 @@ export default defineComponent({
if
(
response
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
if
(
response
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
Notify
.
create
({
Notify
.
create
({
type
:
'positive'
,
type
:
'positive'
,
message
:
'Duyệt tài kh
aor
n thành công'
,
message
:
'Duyệt tài kh
oả
n thành công'
,
actions
:
[{
icon
:
'close'
,
color
:
'white'
}],
actions
:
[{
icon
:
'close'
,
color
:
'white'
}],
});
});
void
getListCustomers
();
void
getListCustomers
();
...
...
src/pages/nghe-si-cho-duyet/index.vue
0 → 100644
View file @
1c90e72f
<
template
>
<div
class=
"row q-col-gutter-sm flex-center q-mt-sm"
>
<q-space></q-space>
<!--
<div
class=
"col-2"
>
<q-input
v-model=
"fullNameKeyword"
dense
outlined
:label=
"$t('artist.tableColumnsArtist.artistName')"
clearable
></q-input>
</div>
-->
<!--
<div
class=
"col-2"
dense
outlined
>
<q-select
v-model=
"fieldSelected"
:options=
"fieldOptions"
option-label=
"name"
option-value=
"id"
label=
"Lĩnh vực"
dense
outlined
clearable
></q-select>
</div>
-->
<!--
<div
class=
"col-2"
dense
outlined
>
<q-select
v-model=
"professionSelected"
:options=
"professionOptions"
option-label=
"name"
option-value=
"id"
dense
outlined
label=
"Độ chuyên"
clearable
></q-select>
</div>
-->
<!--
<div
class=
"col-2"
dense
outlined
>
<q-select
v-model=
"provinceSelected"
:options=
"provinceOptions"
option-label=
"fullName"
option-value=
"name"
dense
outlined
label=
"Địa chỉ"
clearable
></q-select>
</div>
-->
<div
class=
"col-auto"
>
<q-btn
color=
"primary"
no-caps
style=
"width: 7.14rem"
:label=
"$t('crudActions.search')"
@
click=
"getListArtists"
>
</q-btn>
</div>
<div
class=
"col-12 q-mt-sm"
>
<q-table
:rows=
"userTableRowsArtist"
:columns=
"userTableColumnsArtist"
row-key=
"name"
separator=
"cell"
:no-data-label=
"$t('emptyData')"
:rows-per-page-label=
"$t('recordPerPage')"
:pagination=
"
{
rowsPerPage: 0,
}"
wrap-cells
hide-pagination
class="sticky-header-table"
>
<template
v-slot:body-cell-stt=
"item"
>
<q-td
:item=
"item"
style=
"text-align: center"
>
{{
1
+
item
.
rowIndex
+
pageSize
*
(
pageIndex
-
1
)
}}
</q-td>
</
template
>
<
template
v-slot:body-cell-avatar=
"avatar"
>
<q-td
style=
"padding: auto; height: 100%; text-align: center"
>
<q-img
style=
"width: 5rem; height: 6rem"
:src=
"
avatar.row.avatar
? configImg.API_IMAGE_ENDPOINT + avatar.row.avatar
: avatar.row.avatar
"
></q-img>
</q-td>
</
template
>
<
template
v-slot:body-cell-approvalStatus=
"rowData"
>
<q-td>
<div
align=
"center"
>
<q-chip
v-if=
"rowData.value === 0"
color=
"orange"
text-color=
"white"
size=
"sm"
>
Chưa duyệt
</q-chip>
<q-chip
v-if=
"rowData.value === 2"
color=
"red"
text-color=
"white"
size=
"sm"
>
Từ chối duyệt
</q-chip>
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-action=
"rowData"
>
<q-td
style=
"padding: 0; text-align: center"
>
<!--
<q-btn
flat
round
color=
"primary"
icon=
"mdi-account-edit-outline"
@
click=
"openUpdateCustomerDialog(rowData.row.id)"
>
<q-tooltip
:offset=
"[20, 10]"
>
{{
$t
(
'customer.toolTipMessage.updateCustomerInfo'
)
}}
</q-tooltip>
</q-btn>
-->
<q-btn
flat
round
color=
"primary"
icon=
"mdi-check-circle-outline"
@
click=
"confirmBrowserArtist(rowData.row.id)"
>
<q-tooltip
:offset=
"[20, 10]"
>
Duyệt
</q-tooltip>
</q-btn>
<q-btn
v-if=
"rowData.row.approvalStatus === 0"
flat
round
size=
"1em"
color=
"primary"
icon=
"mdi-block-helper"
@
click=
"confirmRefusedBrowserArtist(rowData.row.id)"
>
<q-tooltip>
Từ chối
</q-tooltip>
</q-btn>
<!--
<q-btn
flat
round
color=
"primary"
icon=
"mdi-delete-outline"
@
click=
"confirmDeleteCustomer(rowData.row.id)"
>
<q-tooltip
:offset=
"[20, 10]"
>
{{
$t
(
'customer.toolTipMessage.deleteCustomer'
)
}}
</q-tooltip>
</q-btn>
-->
</q-td>
</
template
>
</q-table>
</div>
<div
class=
"col-12 q-mt-sm"
>
<Pagination
v-model:currentPage=
"pageIndex"
v-model:pageSize=
"pageSize"
:totalPage=
"totalPage"
@
update:pageSize=
"changePageSize"
@
update:currentPage=
"getListArtists"
/>
</div>
<UpdateArtistsDialogComponent
v-model:show-dialog-update=
"showDialogUpdate"
:id=
"artistId"
v-model:account=
"account"
v-model:artist-code=
"artistCode"
:avatar=
"avatar"
v-model:full-name=
"fullName"
v-model:artist-name=
"artistName"
v-model:birthday=
"birthday"
v-model:sex=
"sex"
v-model:nationality=
"nationality"
v-model:status=
"status"
v-model:address=
"address"
v-model:fields=
"fields"
v-model:works=
"works"
v-model:qualification=
"qualification"
v-model:artist-level=
"artistLevel"
v-model:phone-number=
"phoneNumber"
v-model:email=
"email"
v-model:facebook=
"facebook"
v-model:facebook-message=
"facebookMessage"
v-model:instagram=
"instagram"
v-model:whatsapp=
"whatsapp"
v-model:hidden_img=
"hidden_img"
v-model:mn-name=
"mnName"
v-model:mn-phone=
"mnPhone"
v-model:mn-email=
"mnEmail"
v-model:mn-booking-phone=
"mnBookingPhone"
v-model:mn-booking-email=
"mnBookingEmail"
v-model:mn-fbmess=
"mnFbmess"
v-model:mn-ins=
"mnIns"
v-model:mn-whatsapp=
"mnWhatsapp"
v-model:favorite-score=
"favoriteScore"
v-model:check_infoBooking=
"check_infoBooking"
:sex-options=
"sexOptions"
:field-options=
"fieldOptions"
:nationality-options=
"nationalityOptions"
:profession-options=
"professionOptions"
:artist-level-options=
"artistLevelOptions"
:work-options=
"workOptions"
:province-options=
"provinceOptions"
:music-options=
"musicOptions"
@
SetAvatar=
"setAvatar($event)"
@
deleteAvatar=
"deleteAvatar"
@
click:CloseBtn=
"showDialogUpdate = false"
@
saveConfigPartnerInfo=
"updateInformationArtist"
></UpdateArtistsDialogComponent>
<RefusedBrowser
:artist-id=
"artistId"
v-model:open-dialog-refused-browser=
"openDialogRefusedBrowser"
@
click:CloseBtn=
"openDialogRefusedBrowser = false"
@
editReCustomer=
"getListArtists"
>
</RefusedBrowser>
</div>
</template>
<
script
lang=
"ts"
>
import
{
i18n
}
from
'src/boot/i18n'
;
import
{
defineComponent
,
onMounted
,
ref
,
Ref
}
from
'vue'
;
import
UpdateArtistsDialogComponent
from
'../../components/artist-information/browser-new-artist-dialog.vue'
;
import
{
Dialog
,
Notify
}
from
'quasar'
;
import
{
PaginationResponse
,
ArtistInfoType
,
FieldType
,
NationalityType
,
ArtistLevelType
,
QualificationType
,
WorkType
,
ProvinceType
,
MusicType
,
BannerType
,
CardBankType
,
TypeCardType
,
SchedulesType
,
FileUploadType
,
}
from
'src/assets/type'
;
import
Pagination
from
'components/pagination/index.vue'
;
import
{
api
,
BaseResponseBody
}
from
'src/boot/axios'
;
import
RefusedBrowser
from
'../../components/artist-information/openDialogRefusedBrowserArtist.vue'
;
import
{
API_PATHS
,
config
}
from
'src/assets/configurations.example'
;
import
{
AxiosResponse
}
from
'axios'
;
import
moment
from
'moment'
;
import
{
useRoute
}
from
'vue-router'
;
import
{
Pages
}
from
'src/router/routes'
;
import
{
Router
}
from
'src/router'
;
export
type
AvatarType
=
{
file
?:
File
;
url
?:
string
|
null
;
};
export
default
defineComponent
({
components
:
{
Pagination
,
RefusedBrowser
,
UpdateArtistsDialogComponent
,
},
setup
()
{
// const route = useRoute();
const
userTableColumnsArtist
=
[
{
name
:
'stt'
,
field
:
'stt'
,
required
:
true
,
label
:
'STT'
,
align
:
'center'
,
sortable
:
false
,
},
{
name
:
'artistCode'
,
field
:
'artistCode'
,
required
:
true
,
label
:
i18n
.
global
.
t
(
'artist.tableColumnsArtist.artistCode'
),
headerStyle
:
'text-align: center !important;'
,
align
:
'left'
,
sortable
:
false
,
},
{
name
:
'accountName'
,
field
:
'accountName'
,
required
:
true
,
label
:
'Tên đăng nhập'
,
headerStyle
:
'text-align: center !important;'
,
align
:
'left'
,
sortable
:
false
,
},
{
name
:
'fullName'
,
field
:
'fullName'
,
required
:
true
,
label
:
i18n
.
global
.
t
(
'artist.tableColumnsArtist.fullName'
),
headerStyle
:
'text-align: center !important;'
,
align
:
'left'
,
sortable
:
false
,
},
{
name
:
'artistName'
,
field
:
'artistName'
,
required
:
true
,
label
:
i18n
.
global
.
t
(
'artist.tableColumnsArtist.artistName'
),
headerStyle
:
'text-align: center !important;'
,
align
:
'left'
,
sortable
:
false
,
},
{
name
:
'avatar'
,
field
:
'avatar'
,
required
:
true
,
label
:
i18n
.
global
.
t
(
'artist.tableColumnsArtist.avatar'
),
headerStyle
:
'text-align: center !important;'
,
align
:
'left'
,
sortable
:
false
,
},
{
name
:
'field'
,
field
:
'field'
,
required
:
true
,
label
:
i18n
.
global
.
t
(
'artist.tableColumnsArtist.field'
),
headerStyle
:
'text-align: center !important;'
,
align
:
'left'
,
sortable
:
false
,
},
{
name
:
'work'
,
field
:
'work'
,
required
:
true
,
label
:
i18n
.
global
.
t
(
'artist.tableColumnsArtist.work'
),
headerStyle
:
'text-align: center !important;'
,
align
:
'left'
,
sortable
:
false
,
},
{
name
:
'qualification'
,
field
:
'qualification'
,
required
:
true
,
label
:
i18n
.
global
.
t
(
'artist.tableColumnsArtist.qualification'
),
headerStyle
:
'text-align: center !important;'
,
align
:
'left'
,
sortable
:
false
,
},
// {
// name: 'artistLevel',
// field: 'artistLevel',
// required: true,
// label: i18n.global.t('artist.tableColumnsArtist.artistLevel'),
// headerStyle: 'text-align: center !important;',
// align: 'left',
// sortable: false,
// },
{
name
:
'favoriteScore'
,
field
:
'favoriteScore'
,
required
:
true
,
label
:
i18n
.
global
.
t
(
'artist.tableColumnsArtist.favoriteScore'
),
headerStyle
:
'text-align: center !important;'
,
align
:
'center'
,
sortable
:
false
,
},
{
name
:
'approvalStatus'
,
field
:
'approvalStatus'
,
required
:
true
,
label
:
'T.Thái chờ duyệt'
,
headerStyle
:
'text-align: center !important;'
,
align
:
'center'
,
sortable
:
false
,
},
{
name
:
'action'
,
field
:
'action'
,
required
:
true
,
label
:
i18n
.
global
.
t
(
'artist.tableColumnsArtist.action'
),
headerStyle
:
'text-align: center !important;'
,
align
:
'center'
,
sortable
:
false
,
},
];
const
configImg
=
config
;
const
showDialogUpdate
:
Ref
<
boolean
>
=
ref
(
false
);
const
openDialogRefusedBrowser
:
Ref
<
boolean
>
=
ref
(
false
);
const
userTableRowsArtist
:
Ref
<
unknown
[]
>
=
ref
([]);
const
pageIndex
=
ref
(
1
);
const
pageSize
=
ref
(
20
);
const
totalPage
=
ref
(
0
);
const
artistId
:
Ref
<
number
>
=
ref
(
0
);
const
account
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
avatar
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
avatarFile
:
Ref
<
File
|
null
>
=
ref
(
null
);
const
avatarUploaded
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
avatarNoChange
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
artistCode
:
Ref
<
string
>
=
ref
(
''
);
const
fullName
:
Ref
<
string
>
=
ref
(
''
);
const
artistName
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
birthday
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
sex
:
Ref
<
number
|
null
>
=
ref
(
null
);
const
sexOptions
=
ref
([
{
id
:
1
,
name
:
'Nam'
},
{
id
:
2
,
name
:
'Nữ'
},
{
id
:
3
,
name
:
'Khác'
},
]);
const
nationality
:
Ref
<
NationalityType
>
=
ref
({
id
:
1
,
name
:
'Việt Nam'
,
numIndex
:
1
,
status
:
1
,
});
const
favoriteScore
:
Ref
<
number
|
undefined
>
=
ref
(
undefined
);
const
mnName
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
mnPhone
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
mnEmail
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
qualification
:
Ref
<
QualificationType
|
null
>
=
ref
(
null
);
const
artistLevel
:
Ref
<
ArtistLevelType
|
null
>
=
ref
(
null
);
const
status
:
Ref
<
number
>
=
ref
(
1
);
const
fields
:
Ref
<
FieldType
|
null
>
=
ref
(
null
);
const
fieldsPrivate
:
Ref
<
FieldType
|
null
>
=
ref
(
null
);
const
works
:
Ref
<
WorkType
[]
>
=
ref
([]);
const
phoneNumber
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
email
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
facebook
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
facebookMessage
:
Ref
<
string
|
null
|
undefined
>
=
ref
();
const
instagram
:
Ref
<
string
|
null
|
undefined
>
=
ref
();
const
whatsapp
:
Ref
<
string
|
null
|
undefined
>
=
ref
();
const
hidden_img
=
ref
(
false
);
const
mnBookingEmail
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
mnBookingPhone
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
mnFbmess
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
mnIns
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
mnWhatsapp
:
Ref
<
string
|
null
>
=
ref
(
null
);
const
workOptions
:
Ref
<
WorkType
[]
>
=
ref
([]);
const
musicOptions
:
Ref
<
MusicType
[]
>
=
ref
([]);
const
fieldOptions
:
Ref
<
FieldType
[]
>
=
ref
([]);
const
nationalityOptions
:
Ref
<
NationalityType
[]
>
=
ref
([]);
const
professionOptions
:
Ref
<
QualificationType
[]
>
=
ref
([]);
const
artistLevelOptions
:
Ref
<
ArtistLevelType
[]
>
=
ref
([]);
const
address
:
Ref
<
ProvinceType
[]
>
=
ref
([]);
const
musics
:
Ref
<
MusicType
[]
>
=
ref
([]);
const
provinceOptions
:
Ref
<
ProvinceType
[]
>
=
ref
([]);
const
formatSchedules
:
Ref
<
string
[]
>
=
ref
([]);
const
schedules
:
Ref
<
SchedulesType
[]
>
=
ref
([]);
const
check_infoBooking
=
ref
(
false
);
const
updateInformationArtist
=
async
()
=>
{
try
{
if
(
avatarFile
.
value
!==
null
)
{
await
callApiUploadAvatar
(
avatarFile
.
value
);
}
if
(
avatarFile
.
value
===
null
)
{
avatarUploaded
.
value
=
avatarNoChange
.
value
;
}
if
(
avatar
.
value
===
null
)
{
avatarUploaded
.
value
=
null
;
}
// cách 1: dùng reduce
const
schedules
:
Array
<
{
scheduleTime
:
string
}
>
=
formatSchedules
.
value
.
reduce
(
(
acc
:
Array
<
{
scheduleTime
:
string
}
>
,
item
)
=>
{
acc
.
push
({
scheduleTime
:
moment
(
item
,
'YYYY/MM/DD'
).
format
(
'DD/MM/YYYY HH:mm:ss'
),
});
return
acc
;
},
[]
);
const
response
=
(
await
api
({
url
:
API_PATHS
.
accountArtistBrowsing
,
method
:
'POST'
,
data
:
{
id
:
artistId
.
value
,
musicTypeDto
:
musics
.
value
,
avatar
:
avatarUploaded
.
value
,
artistCode
:
artistCode
.
value
,
artistName
:
artistName
.
value
,
// eslint-disable-next-line @typescript-eslint/restrict-plus-operands
birthday
:
birthday
.
value
===
null
?
null
:
birthday
.
value
+
' 00:00:00'
,
sex
:
sex
.
value
,
provinceDto
:
address
.
value
,
address
:
null
,
phoneNumber
:
phoneNumber
.
value
,
email
:
email
.
value
,
facebook
:
facebook
.
value
,
facebookMessage
:
facebookMessage
.
value
,
instagram
:
instagram
.
value
,
whatsapp
:
whatsapp
.
value
,
fullName
:
fullName
.
value
,
shortDescription
:
null
,
account
:
account
.
value
,
socialEmbedded
:
null
,
artistLevel
:
artistLevel
.
value
,
// fields: fields.value === null ? [] : [fields.value],
// fields: fields.value === null ? [] : [fields.value],
fields
:
[],
nationality
:
nationality
.
value
,
qualification
:
qualification
.
value
,
works
:
works
.
value
,
banners
:
null
,
bankAccounts
:
null
,
schedules
,
stories
:
null
,
products
:
null
,
mnName
:
mnName
.
value
,
mnPhone
:
mnPhone
.
value
,
mnEmail
:
mnEmail
.
value
,
mnBookingPhone
:
mnBookingPhone
.
value
,
mnBookingEmail
:
mnBookingEmail
.
value
,
mnFbmess
:
mnFbmess
.
value
,
mnIns
:
mnIns
.
value
,
mnWhatsapp
:
mnWhatsapp
.
value
,
favoriteScore
:
favoriteScore
.
value
,
},
}))
as
AxiosResponse
<
BaseResponseBody
<
unknown
>>
;
if
(
response
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
await
Router
.
push
({
name
:
Pages
.
artist
});
Notify
.
create
({
type
:
'positive'
,
message
:
i18n
.
global
.
t
(
'artist.actionMessages.editArtistAccess'
),
actions
:
[{
icon
:
'close'
,
color
:
'white'
}],
});
}
}
catch
(
error
)
{}
};
const
callApiUploadAvatar
=
async
(
file
:
File
)
=>
{
try
{
const
bodyFormData
=
new
FormData
();
bodyFormData
.
append
(
'file'
,
file
);
const
response
=
(
await
api
({
headers
:
{
'Content-Type'
:
'multipart/form-data'
},
url
:
config
.
API_IMAGE_ENDPOINT
,
method
:
'POST'
,
data
:
bodyFormData
,
}))
as
AxiosResponse
<
BaseResponseBody
<
FileUploadType
>>
;
if
(
response
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
avatarUploaded
.
value
=
response
.
data
.
data
.
fileName
;
}
}
catch
(
error
)
{}
};
const
confirmBrowserArtist
=
(
id
:
number
)
=>
{
void
getDetailArtist
(
id
);
};
const
deleteAvatar
=
()
=>
{
avatar
.
value
=
null
;
avatarFile
.
value
=
null
;
};
const
setAvatar
=
(
value
:
{
file
?:
File
;
url
?:
string
})
=>
{
avatarFile
.
value
=
value
.
file
as
File
;
avatar
.
value
=
value
.
url
as
string
;
};
const
UpdateBirtday
=
(
value
:
string
)
=>
{
birthday
.
value
=
value
;
};
const
getDetailArtist
=
async
(
id
:
number
)
=>
{
try
{
const
response
=
(
await
api
({
url
:
API_PATHS
.
detailRegisterArtist
,
method
:
'GET'
,
params
:
{
artistId
:
id
,
},
}))
as
AxiosResponse
<
BaseResponseBody
<
ArtistInfoType
>>
;
if
(
response
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
const
ArtistInformation
=
response
.
data
.
data
;
artistId
.
value
=
response
.
data
.
data
.
id
;
avatar
.
value
=
ArtistInformation
.
avatar
!==
null
?
config
.
API_IMAGE_ENDPOINT
+
ArtistInformation
.
avatar
:
null
;
avatarNoChange
.
value
=
ArtistInformation
.
avatar
;
account
.
value
=
ArtistInformation
.
account
;
artistCode
.
value
=
ArtistInformation
.
artistCode
;
fullName
.
value
=
ArtistInformation
.
fullName
;
artistName
.
value
=
ArtistInformation
.
artistName
;
birthday
.
value
=
birthday
.
value
===
null
?
null
:
moment
(
ArtistInformation
.
birthday
,
'DD/MM/YYYY HH:mm:ss'
).
format
(
'DD/MM/YYYY'
);
// chooseAddress.value = ArtistInformation.address
status
.
value
=
ArtistInformation
.
status
;
phoneNumber
.
value
=
ArtistInformation
.
phoneNumber
;
email
.
value
=
ArtistInformation
.
email
;
facebook
.
value
=
ArtistInformation
.
facebook
;
facebookMessage
.
value
=
ArtistInformation
.
facebookMessage
;
instagram
.
value
=
ArtistInformation
.
instagram
;
whatsapp
.
value
=
ArtistInformation
.
whatsapp
;
mnName
.
value
=
ArtistInformation
.
mnName
;
mnPhone
.
value
=
ArtistInformation
.
mnPhone
;
mnEmail
.
value
=
ArtistInformation
.
mnEmail
;
mnBookingPhone
.
value
=
ArtistInformation
.
mnBookingPhone
;
mnBookingEmail
.
value
=
ArtistInformation
.
mnBookingEmail
;
mnFbmess
.
value
=
ArtistInformation
.
mnFbmess
;
mnIns
.
value
=
ArtistInformation
.
mnIns
;
mnWhatsapp
.
value
=
ArtistInformation
.
mnWhatsapp
;
favoriteScore
.
value
=
ArtistInformation
.
favoriteScore
;
nationality
.
value
=
ArtistInformation
.
nationality
;
qualification
.
value
=
ArtistInformation
.
qualification
;
works
.
value
=
ArtistInformation
.
works
;
artistLevel
.
value
=
ArtistInformation
.
artistLevel
;
sex
.
value
=
ArtistInformation
.
sex
;
fields
.
value
=
ArtistInformation
.
fields
[
0
];
fieldsPrivate
.
value
=
ArtistInformation
.
fields
[
0
];
musics
.
value
=
ArtistInformation
.
musicTypeDto
;
address
.
value
=
ArtistInformation
.
provinceDto
;
showDialogUpdate
.
value
=
true
;
}
}
catch
(
error
)
{}
};
const
getListArtists
=
async
()
=>
{
try
{
const
response
=
(
await
api
({
url
:
API_PATHS
.
getListRegister
,
method
:
'GET'
,
params
:
{
pageIndex
:
pageIndex
.
value
,
pageSize
:
pageSize
.
value
,
// name: fullNameKeyword.value,
// field: fieldSelected.value?.id,
// qualification: professionSelected.value?.id,
// address: provinceSelected.value?.name
},
}))
as
AxiosResponse
<
BaseResponseBody
<
PaginationResponse
<
ArtistInfoType
>>
>
;
if
(
response
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
userTableRowsArtist
.
value
=
response
.
data
.
data
.
data
;
totalPage
.
value
=
response
.
data
.
data
.
totalPages
;
}
}
catch
(
error
)
{}
};
const
changePageSize
=
()
=>
{
pageIndex
.
value
=
1
;
void
getListArtists
();
};
const
getFieldOptions
=
async
()
=>
{
const
response
=
(
await
api
({
url
:
API_PATHS
.
getFieldOptions
,
method
:
'GET'
,
params
:
{},
}))
as
AxiosResponse
<
BaseResponseBody
<
FieldType
[]
>>
;
if
(
response
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
fieldOptions
.
value
=
response
.
data
.
data
;
}
};
const
getNationalityOptions
=
async
()
=>
{
const
response
=
(
await
api
({
url
:
API_PATHS
.
getNationalityOptions
,
method
:
'GET'
,
params
:
{},
}))
as
AxiosResponse
<
BaseResponseBody
<
NationalityType
[]
>>
;
if
(
response
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
nationalityOptions
.
value
=
response
.
data
.
data
;
}
};
/// xếp hạng
const
getArtistLevelOptions
=
async
()
=>
{
const
response
=
(
await
api
({
url
:
API_PATHS
.
getArtistLevelOptions
,
method
:
'GET'
,
params
:
{},
}))
as
AxiosResponse
<
BaseResponseBody
<
ArtistLevelType
[]
>>
;
if
(
response
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
artistLevelOptions
.
value
=
response
.
data
.
data
;
}
};
// thể loại
const
getMusicTypeOptions
=
async
()
=>
{
const
response
=
(
await
api
({
url
:
API_PATHS
.
getMusicTypeOptions
,
method
:
'GET'
,
params
:
{},
}))
as
AxiosResponse
<
BaseResponseBody
<
MusicType
[]
>>
;
if
(
response
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
musicOptions
.
value
=
response
.
data
.
data
;
}
};
const
getProvinceOptions
=
async
()
=>
{
const
response
=
(
await
api
({
url
:
API_PATHS
.
getProvinceOptions
,
method
:
'GET'
,
params
:
{},
}))
as
AxiosResponse
<
BaseResponseBody
<
ProvinceType
[]
>>
;
if
(
response
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
provinceOptions
.
value
=
response
.
data
.
data
;
}
};
const
getQualificationOptions
=
async
()
=>
{
const
response
=
(
await
api
({
url
:
API_PATHS
.
getQualificationOptions
,
method
:
'GET'
,
params
:
{},
}))
as
AxiosResponse
<
BaseResponseBody
<
QualificationType
[]
>>
;
if
(
response
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
professionOptions
.
value
=
response
.
data
.
data
;
}
};
const
getWorkOptions
=
async
()
=>
{
const
response
=
(
await
api
({
url
:
API_PATHS
.
getWorkOptions
,
method
:
'GET'
,
params
:
{},
}))
as
AxiosResponse
<
BaseResponseBody
<
WorkType
[]
>>
;
if
(
response
.
data
.
error
.
code
===
config
.
API_RES_CODE
.
OK
.
code
)
{
workOptions
.
value
=
response
.
data
.
data
;
}
};
const
confirmRefusedBrowserArtist
=
(
id
:
number
)
=>
{
artistId
.
value
=
id
;
openDialogRefusedBrowser
.
value
=
true
;
};
onMounted
(()
=>
{
void
getListArtists
();
void
getFieldOptions
();
void
getNationalityOptions
();
void
getArtistLevelOptions
();
void
getQualificationOptions
();
void
getWorkOptions
();
void
getProvinceOptions
();
void
getMusicTypeOptions
();
});
return
{
configImg
,
openDialogRefusedBrowser
,
mnName
,
schedules
,
formatSchedules
,
sex
,
userTableColumnsArtist
,
userTableRowsArtist
,
getListArtists
,
pageIndex
,
pageSize
,
account
,
mnBookingPhone
,
sexOptions
,
fieldOptions
,
nationalityOptions
,
professionOptions
,
artistLevelOptions
,
workOptions
,
provinceOptions
,
musicOptions
,
mnBookingEmail
,
mnFbmess
,
mnIns
,
mnWhatsapp
,
favoriteScore
,
check_infoBooking
,
showDialogUpdate
,
mnEmail
,
mnPhone
,
hidden_img
,
totalPage
,
changePageSize
,
fullName
,
whatsapp
,
artistName
,
instagram
,
facebookMessage
,
facebook
,
phoneNumber
,
email
,
artistLevel
,
qualification
,
works
,
getProvinceOptions
,
getMusicTypeOptions
,
getFieldOptions
,
address
,
fields
,
getNationalityOptions
,
status
,
nationality
,
getArtistLevelOptions
,
getQualificationOptions
,
getWorkOptions
,
artistId
,
artistCode
,
confirmBrowserArtist
,
confirmRefusedBrowserArtist
,
updateInformationArtist
,
avatar
,
setAvatar
,
deleteAvatar
,
UpdateBirtday
,
birthday
,
};
},
});
</
script
>
src/pages/nhom-nguoi-dung/UserGroup.ts
View file @
1c90e72f
...
@@ -95,6 +95,7 @@ const updateGroupInfo = async ($store: Store<StateInterface>) => {
...
@@ -95,6 +95,7 @@ const updateGroupInfo = async ($store: Store<StateInterface>) => {
id
:
parsedPage
.
id
||
-
1
,
id
:
parsedPage
.
id
||
-
1
,
roles
:
parsedPage
.
roles
,
roles
:
parsedPage
.
roles
,
});
});
console
.
log
(
acc
,
'12312'
)
return
acc
;
return
acc
;
},
},
[]
[]
...
...
src/router/routes.ts
View file @
1c90e72f
...
@@ -7,6 +7,7 @@ export enum Pages {
...
@@ -7,6 +7,7 @@ export enum Pages {
cmsUser
=
'nguoi-dung'
,
cmsUser
=
'nguoi-dung'
,
managingUnit
=
'don-vi-chu-quan'
,
managingUnit
=
'don-vi-chu-quan'
,
artist
=
'nghe-sy'
,
artist
=
'nghe-sy'
,
artistBrowsing
=
'nghe-sy-cho-duyet'
,
informationArtist
=
'cap-nhat-thong-tin-nghe-sy'
,
informationArtist
=
'cap-nhat-thong-tin-nghe-sy'
,
customer
=
'khach-hang'
,
customer
=
'khach-hang'
,
...
@@ -63,6 +64,11 @@ const routes: RouteRecordRaw[] = [
...
@@ -63,6 +64,11 @@ const routes: RouteRecordRaw[] = [
component
:
()
=>
import
(
'pages/nghe-sy/index.vue'
),
component
:
()
=>
import
(
'pages/nghe-sy/index.vue'
),
name
:
Pages
.
artist
,
name
:
Pages
.
artist
,
},
},
{
path
:
'/nghe-si-cho-duyet'
,
component
:
()
=>
import
(
'pages/nghe-si-cho-duyet/index.vue'
),
name
:
Pages
.
artistBrowsing
,
},
{
{
path
:
'/nghe-sy/cap-nhat-thong-tin-nghe-sy/:id'
,
path
:
'/nghe-sy/cap-nhat-thong-tin-nghe-sy/:id'
,
component
:
()
=>
import
(
'pages/cap-nhat-thong-tin-nghe-sy/index.vue'
),
component
:
()
=>
import
(
'pages/cap-nhat-thong-tin-nghe-sy/index.vue'
),
...
...
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