update

parent 8bf9d4eb
......@@ -124,6 +124,8 @@ export enum API_PATHS {
getLitCustomerWaiting = 'customer/listRegister',
detailCustomerWaiting = 'customer/detailRegister',
accountCustomerBrowsing = 'customer/accountCustomerBrowsing',
customerNotBrowsing = 'customer/customerNotBrowsing'
customerNotBrowsing = 'customer/customerNotBrowsing',
getListRegister = 'artist/getListRegister',
accountArtistBrowsing = 'customer/accountArtistBrowsing',
detailRegisterArtist = 'artist/detailRegister',
}
......@@ -257,6 +257,8 @@ export type DetailUnit = {
contracts: Array<Contract>;
};
export type CustomerType = {
id: number;
code: string | null;
......
<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>
<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
......@@ -11,9 +11,7 @@
<q-card-section>
<q-item>
<q-item-section>
<q-item-label class="text-h6 text-weight-regular">{{
$t('customer.dialogLabel.title.editCustomer')
}}</q-item-label>
<q-item-label class="text-h6 text-weight-regular">Duyệt thông tin khách hàng</q-item-label>
</q-item-section>
</q-item>
</q-card-section>
......
<template>
<q-dialog persistent
:model-value="openDialogRefusedBrowser"
>
<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-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-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
<q-card-section style="padding-top: 0px">
<q-input
outlined
hide-bottom-space
:rules="contentRules"
v-model="content"
label="Nội dung"
type="textarea" />
type="textarea"
/>
</q-card-section>
<q-card-actions align="right">
<q-btn
......@@ -29,7 +29,6 @@
style="width: 90px"
label="Hủy"
@click="$emit('click:CloseBtn')"
/>
<q-btn
type="submit"
......@@ -37,7 +36,6 @@
no-caps
style="width: 90px"
label="Ok"
/>
</q-card-actions>
</q-form>
......@@ -52,33 +50,30 @@ 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: {
export default defineComponent({
props: {
openDialogRefusedBrowser: {
type: Boolean,
required: true,
},
customerId: {
type: Number,
required: true
}
required: true,
},
setup(props, context){
},
setup(props, context) {
watch(
() => props.openDialogRefusedBrowser,
(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 = [
(val?: string) =>
(val && val.trim().length) ||
'Vui lòng nhập nội dung'
(val?: string) => (val && val.trim().length) || 'Vui lòng nhập nội dung',
];
const confirmRefusedCustomer = async () => {
try {
......@@ -88,8 +83,8 @@ const content: Ref<string | null> = ref(null);
data: {
id: props.customerId,
isCustomer: 1,
approvalStatus: 0,
reason: content.value
approvalStatus: 2,
reason: content.value,
},
})) as AxiosResponse<BaseResponseBody<unknown>>;
if (browserResult.data.error.code === config.API_RES_CODE.OK.code) {
......@@ -99,23 +94,17 @@ const content: Ref<string | null> = ref(null);
actions: [{ icon: 'close', color: 'white' }],
});
context.emit('editReCustomer' )
context.emit('click:CloseBtn')
context.emit('editReCustomer');
context.emit('click:CloseBtn');
}
} catch (error) {}
}
};
return {
contentRules,
content,
confirmRefusedCustomer
}
confirmRefusedCustomer,
};
},
emits:['click:CloseBtn','editReCustomer']
})
emits: ['click:CloseBtn', 'editReCustomer'],
});
</script>
<template>
<q-list>
<MenuItemComponent
v-for="(menuItem, menuItemIdx) in $store.state.authentication.menuList"
:key="`menu-item-${menuItemIdx}-${menuItem.id}`"
......
......@@ -80,6 +80,9 @@ export default defineComponent({
const artistLevelOptions: Ref<ArtistLevelType[]> = ref([]);
const cardBankOptions: Ref<CardBankType[]> = ref([]);
const typeBankOptions: Ref<TypeCardType[]> = ref([]);
const workOptions: Ref<WorkType[]> = ref([]);
const musicOptions: Ref<MusicType[]> = ref([]);
const sexOptions = ref([
......
......@@ -525,7 +525,7 @@ export default defineComponent({
if (response.data.error.code === config.API_RES_CODE.OK.code) {
Notify.create({
type: 'positive',
message: 'Duyệt tài khaorn thành công',
message: 'Duyệt tài khoản thành công',
actions: [{ icon: 'close', color: 'white' }],
});
void getListCustomers();
......
<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>
......@@ -95,6 +95,7 @@ const updateGroupInfo = async ($store: Store<StateInterface>) => {
id: parsedPage.id || -1,
roles: parsedPage.roles,
});
console.log(acc,'12312')
return acc;
},
[]
......
......@@ -7,6 +7,7 @@ export enum Pages {
cmsUser = 'nguoi-dung',
managingUnit = 'don-vi-chu-quan',
artist = 'nghe-sy',
artistBrowsing = 'nghe-sy-cho-duyet',
informationArtist = 'cap-nhat-thong-tin-nghe-sy',
customer = 'khach-hang',
......@@ -63,6 +64,11 @@ const routes: RouteRecordRaw[] = [
component: () => import('pages/nghe-sy/index.vue'),
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',
component: () => import('pages/cap-nhat-thong-tin-nghe-sy/index.vue'),
......
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