update

parent 07c384e0
...@@ -57,7 +57,11 @@ export default defineComponent({ ...@@ -57,7 +57,11 @@ export default defineComponent({
isMobilePhone(val) || isMobilePhone(val) ||
i18n.global.t('userPage.validateMessages.isMobilePhone'), i18n.global.t('userPage.validateMessages.isMobilePhone'),
]; ];
const birthdayRules = [
(val?: string) =>
(val && val.trim().length) ||
i18n.global.t('userPage.validateMessages.requireBirthday'),
];
const addressRules = [ const addressRules = [
(val?: string) => (val?: string) =>
(val && val.trim().length) || (val && val.trim().length) ||
...@@ -74,9 +78,8 @@ export default defineComponent({ ...@@ -74,9 +78,8 @@ export default defineComponent({
i18n.global.t('userPage.validateMessages.requireSex'), i18n.global.t('userPage.validateMessages.requireSex'),
]; ];
const groupRules = [ const groupRules = [
(val?: number) => (val?: Array<unknown>) =>
val !== undefined || val?.length || i18n.global.t('userPage.validateMessages.requiredGroup'),
i18n.global.t('userPage.validateMessages.requiredGroup'),
]; ];
return { return {
userNameRules, userNameRules,
...@@ -88,6 +91,7 @@ export default defineComponent({ ...@@ -88,6 +91,7 @@ export default defineComponent({
unitRules, unitRules,
sexRules, sexRules,
groupRules, groupRules,
birthdayRules,
}; };
}, },
emits: [ emits: [
......
...@@ -77,8 +77,6 @@ ...@@ -77,8 +77,6 @@
type="text" type="text"
class="q-my-sm" class="q-my-sm"
outlined outlined
:rules="addressRules"
hide-bottom-space
></q-input> ></q-input>
</div> </div>
<div class="col-6"> <div class="col-6">
...@@ -118,9 +116,10 @@ ...@@ -118,9 +116,10 @@
<q-input <q-input
:model-value="birthday" :model-value="birthday"
@update:model-value="$emit('update:birthday', $event)" @update:model-value="$emit('update:birthday', $event)"
:rules="birthdayRules"
type="date" type="date"
class="q-my-sm"
outlined outlined
hide-bottom-space
> >
<template v-slot:prepend> <template v-slot:prepend>
<div class="text-body2"> <div class="text-body2">
...@@ -146,14 +145,13 @@ ...@@ -146,14 +145,13 @@
hide-bottom-space hide-bottom-space
></q-select> ></q-select>
<q-select <!-- <q-select
:model-value="scheduleAccess" :model-value="scheduleAccess"
@update:model-value="$emit('update:scheduleAccess', $event)" @update:model-value="$emit('update:scheduleAccess', $event)"
:label="$t('userPage.dialogLabel.fieldLabels.scheduleAccess')" :label="$t('userPage.dialogLabel.fieldLabels.scheduleAccess')"
:options="listScheduleAccess" :options="listScheduleAccess"
class="q-my-sm"
outlined outlined
></q-select> ></q-select> -->
</div> </div>
<q-space></q-space> <q-space></q-space>
<div class="col-6"> <div class="col-6">
......
...@@ -45,7 +45,11 @@ export default defineComponent({ ...@@ -45,7 +45,11 @@ export default defineComponent({
isMobilePhone(val) || isMobilePhone(val) ||
i18n.global.t('userPage.validateMessages.isMobilePhone'), i18n.global.t('userPage.validateMessages.isMobilePhone'),
]; ];
const birthdayRules = [
(val?: string) =>
(val && val.trim().length) ||
i18n.global.t('userPage.validateMessages.requireBirthday'),
];
const addressRules = [ const addressRules = [
(val?: string) => (val?: string) =>
(val && val.trim().length) || (val && val.trim().length) ||
...@@ -62,9 +66,8 @@ export default defineComponent({ ...@@ -62,9 +66,8 @@ export default defineComponent({
i18n.global.t('userPage.validateMessages.requireSex'), i18n.global.t('userPage.validateMessages.requireSex'),
]; ];
const groupRules = [ const groupRules = [
(val?: number) => (val?: Array<unknown>) =>
val !== undefined || val?.length || i18n.global.t('userPage.validateMessages.requiredGroup'),
i18n.global.t('userPage.validateMessages.requiredGroup'),
]; ];
return { return {
fullNameRules, fullNameRules,
...@@ -74,6 +77,7 @@ export default defineComponent({ ...@@ -74,6 +77,7 @@ export default defineComponent({
unitRules, unitRules,
sexRules, sexRules,
groupRules, groupRules,
birthdayRules,
}; };
}, },
emits: [ emits: [
......
...@@ -50,16 +50,6 @@ ...@@ -50,16 +50,6 @@
:rules="mobileNumberRules" :rules="mobileNumberRules"
hide-bottom-space hide-bottom-space
></q-input> ></q-input>
<q-input
:model-value="address"
@update:model-value="$emit('update:address', $event)"
:label="$t('userPage.dialogLabel.fieldLabels.address')"
type="text"
class="q-my-sm"
outlined
:rules="addressRules"
hide-bottom-space
></q-input>
<q-input <q-input
:model-value="phoneNumber" :model-value="phoneNumber"
@update:model-value="$emit('update:phoneNumber', $event)" @update:model-value="$emit('update:phoneNumber', $event)"
...@@ -68,6 +58,14 @@ ...@@ -68,6 +58,14 @@
class="q-my-sm" class="q-my-sm"
outlined outlined
></q-input> ></q-input>
<q-input
:model-value="address"
@update:model-value="$emit('update:address', $event)"
:label="$t('userPage.dialogLabel.fieldLabels.address')"
type="text"
class="q-my-sm"
outlined
></q-input>
</div> </div>
<div class="col-6"> <div class="col-6">
<q-input <q-input
...@@ -99,8 +97,9 @@ ...@@ -99,8 +97,9 @@
:model-value="birthday" :model-value="birthday"
@update:model-value="$emit('update:birthday', $event)" @update:model-value="$emit('update:birthday', $event)"
type="date" type="date"
class="q-my-sm"
outlined outlined
:rules="birthdayRules"
hide-bottom-space
> >
<template v-slot:prepend> <template v-slot:prepend>
<div class="text-body2"> <div class="text-body2">
...@@ -126,14 +125,13 @@ ...@@ -126,14 +125,13 @@
hide-bottom-space hide-bottom-space
></q-select> ></q-select>
<q-select <!-- <q-select
:model-value="scheduleAccess" :model-value="scheduleAccess"
@update:model-value="$emit('update:scheduleAccess', $event)" @update:model-value="$emit('update:scheduleAccess', $event)"
:label="$t('userPage.dialogLabel.fieldLabels.scheduleAccess')" :label="$t('userPage.dialogLabel.fieldLabels.scheduleAccess')"
:options="listScheduleAccess" :options="listScheduleAccess"
class="q-my-sm"
outlined outlined
></q-select> ></q-select> -->
</div> </div>
<q-space></q-space> <q-space></q-space>
<div class="col-6"> <div class="col-6">
......
...@@ -67,6 +67,7 @@ export default { ...@@ -67,6 +67,7 @@ export default {
title: 'Quản lý người dùng', title: 'Quản lý người dùng',
tableColumns: { tableColumns: {
userName: 'Tên đăng nhập', userName: 'Tên đăng nhập',
keywordSearch: 'Tên người dùng',
fullName: 'Họ tên', fullName: 'Họ tên',
email: 'Email', email: 'Email',
phone: 'Số điện thoại', phone: 'Số điện thoại',
...@@ -104,25 +105,25 @@ export default { ...@@ -104,25 +105,25 @@ export default {
cancel: 'Đóng', cancel: 'Đóng',
}, },
validateMessages: { validateMessages: {
requireUserName: 'Tên đăng nhập không hợp lệ', requireUserName: 'Vui lòng nhập Tên đăng nhập',
requirePassword: 'Vui lòng nhập mật khẩu', requirePassword: 'Vui lòng nhập Mật khẩu',
requireFullName: 'Vui lòng nhập họ tên', requireFullName: 'Vui lòng nhập Họ tên',
requireBirthday: 'Vui lòng chọn Ngày sinh',
requireEmail: 'Vui lòng nhập Email', requireEmail: 'Vui lòng nhập Email',
isEmail: 'Email không hợp lệ', isEmail: 'Email không hợp lệ',
requireMobileNumber: 'Vui lòng nhập số điện thoại', requireMobileNumber: 'Vui lòng nhập Số điện thoại',
isMobilePhone: 'Số điện thoại không hợp lệ', isMobilePhone: 'Số điện thoại không hợp lệ',
requireAddress: 'Vui lòng nhập địa chỉ', requireAddress: 'Vui lòng nhập Địa chỉ',
requireUnit: 'Vui lòng nhập địa chỉ phòng ban', requireUnit: 'Vui lòng nhập Đơn vị phòng ban',
requireSex: 'Vui lòng chọn giới tính', requireSex: 'Vui lòng chọn Giới tính',
requiredGroup: 'Vui lòng chọn nhóm người dùng', requiredGroup: 'Vui lòng chọn Nhóm người dùng',
}, },
confirmActionsTitle: { confirmActionsTitle: {
confirmDeleteUserTitle: 'Xác nhận', confirmDeleteUserTitle: 'Xác nhận',
confirmDeleteUserCancelBtnLabel: 'Huỷ', confirmDeleteUserCancelBtnLabel: 'Huỷ',
confirmDeleteUserContent: 'Bạn có chắc muốn xoá tài khoản', confirmDeleteUserContent: 'Bạn có chắc muốn xoá tài khoản',
confirmResetPasswordContent: confirmResetPasswordContent:
'Bạn có muốn reset mật khẩu của người dùng này không', 'Bạn có muốn reset về mật khẩu: 123@123a cho người dùng này không',
}, },
actionMessages: { actionMessages: {
addNewUserAccess: 'Thêm tài khoản thành công', addNewUserAccess: 'Thêm tài khoản thành công',
......
...@@ -11,6 +11,7 @@ import AddNewUserDialogComponent from '../../components/user-management/add-new- ...@@ -11,6 +11,7 @@ import AddNewUserDialogComponent from '../../components/user-management/add-new-
import UpdateUserDialogComponent from '../../components/user-management/update-user-dialog/index.vue'; import UpdateUserDialogComponent from '../../components/user-management/update-user-dialog/index.vue';
import { GroupInfoType } from '../nhom-nguoi-dung/UserGroup'; import { GroupInfoType } from '../nhom-nguoi-dung/UserGroup';
import Pagination from 'components/pagination/index.vue'; import Pagination from 'components/pagination/index.vue';
// import moment from 'moment';
export default defineComponent({ export default defineComponent({
components: { components: {
...@@ -51,8 +52,8 @@ export default defineComponent({ ...@@ -51,8 +52,8 @@ export default defineComponent({
sortable: false, sortable: false,
}, },
{ {
name: 'phoneNumber', name: 'mobileNumber',
field: 'phoneNumber', field: 'mobileNumber',
required: true, required: true,
label: i18n.global.t('userPage.tableColumns.phone'), label: i18n.global.t('userPage.tableColumns.phone'),
headerStyle: 'text-align: center !important;', headerStyle: 'text-align: center !important;',
...@@ -122,6 +123,7 @@ export default defineComponent({ ...@@ -122,6 +123,7 @@ export default defineComponent({
params: { params: {
pageIndex: pageIndex.value, pageIndex: pageIndex.value,
pageSize: pageSize.value, pageSize: pageSize.value,
name: keyword.value.trim(),
}, },
})) as AxiosResponse<BaseResponseBody<PaginationResponse<UserObject>>>; })) as AxiosResponse<BaseResponseBody<PaginationResponse<UserObject>>>;
if (response.data.error.code === config.API_RES_CODE.OK.code) { if (response.data.error.code === config.API_RES_CODE.OK.code) {
...@@ -132,11 +134,11 @@ export default defineComponent({ ...@@ -132,11 +134,11 @@ export default defineComponent({
} catch (error) {} } catch (error) {}
}; };
const filterListUser: Ref<UserObject[]> = computed(() => { // const filterListUser: Ref<UserObject[]> = computed(() => {
return userTableRows.value.filter((user) => // return userTableRows.value.filter((user) =>
user.userName.includes(keyword.value) // user.userName.includes(keyword.value)
); // );
}); // });
const getListUserGroup = async () => { const getListUserGroup = async () => {
await $store.dispatch('authentication/getListUsers').then((response) => { await $store.dispatch('authentication/getListUsers').then((response) => {
...@@ -170,22 +172,22 @@ export default defineComponent({ ...@@ -170,22 +172,22 @@ export default defineComponent({
try { try {
const groups: { id: number }[] = []; const groups: { id: number }[] = [];
group.value.map((item) => { group.value.map((item) => {
groups.push({ id: (item as unknown) as number }); groups.push({ id: item as unknown as number });
}); });
const response = (await api({ const response = (await api({
url: API_PATHS.addNewUser, url: API_PATHS.addNewUser,
method: 'POST', method: 'POST',
data: { data: {
user: { user: {
userName: userName.value, userName: userName.value.trim(),
password: password.value, password: password.value,
fullName: fullName.value, fullName: fullName.value.trim(),
birthday: birthday.value, birthday: birthday.value,
email: email.value, email: email.value.trim(),
phoneNumber: phoneNumber.value, phoneNumber: phoneNumber.value.trim(),
mobileNumber: mobileNumber.value, mobileNumber: mobileNumber.value.trim(),
sex: sex.value, sex: sex.value,
address: address.value, address: address.value?.trim(),
unit: unit.value, unit: unit.value,
status: status.value ? 1 : 0, status: status.value ? 1 : 0,
}, },
...@@ -205,14 +207,15 @@ export default defineComponent({ ...@@ -205,14 +207,15 @@ export default defineComponent({
} catch (error) {} } catch (error) {}
}; };
const confirmDeleteUser = (userId: number) => { const confirmDeleteUser = (userId: number, userName: string) => {
Dialog.create({ Dialog.create({
title: i18n.global.t( title: i18n.global.t(
'userPage.confirmActionsTitle.confirmDeleteUserTitle' 'userPage.confirmActionsTitle.confirmDeleteUserTitle'
), ),
message: i18n.global.t( message:
i18n.global.t(
'userPage.confirmActionsTitle.confirmDeleteUserContent' 'userPage.confirmActionsTitle.confirmDeleteUserContent'
), ) + ` "${userName}"`,
cancel: i18n.global.t( cancel: i18n.global.t(
'userPage.confirmActionsTitle.confirmDeleteUserCancelBtnLabel' 'userPage.confirmActionsTitle.confirmDeleteUserCancelBtnLabel'
), ),
...@@ -324,7 +327,7 @@ export default defineComponent({ ...@@ -324,7 +327,7 @@ export default defineComponent({
try { try {
const groups: { id: number }[] = []; const groups: { id: number }[] = [];
group.value.map((item) => { group.value.map((item) => {
groups.push({ id: (item as unknown) as number }); groups.push({ id: item as unknown as number });
}); });
const response = (await api({ const response = (await api({
url: API_PATHS.updateUser, url: API_PATHS.updateUser,
...@@ -332,15 +335,15 @@ export default defineComponent({ ...@@ -332,15 +335,15 @@ export default defineComponent({
data: { data: {
user: { user: {
id: id.value, id: id.value,
userName: userName.value, userName: userName.value.trim(),
password: password.value, password: password.value,
fullName: fullName.value, fullName: fullName.value.trim(),
birthday: birthday.value, birthday: birthday.value,
email: email.value, email: email.value.trim(),
phoneNumber: phoneNumber.value, phoneNumber: phoneNumber.value.trim(),
mobileNumber: mobileNumber.value, mobileNumber: mobileNumber.value.trim(),
sex: sex.value, sex: sex.value,
address: address.value, address: address.value?.trim(),
unit: unit.value, unit: unit.value,
status: status.value ? 1 : 0, status: status.value ? 1 : 0,
}, },
...@@ -369,13 +372,13 @@ export default defineComponent({ ...@@ -369,13 +372,13 @@ export default defineComponent({
void getListUsers(); void getListUsers();
}; };
return { return {
rows: userTableRows, userTableRows,
userTableColumns, userTableColumns,
totalPage, totalPage,
pageIndex, pageIndex,
pageSize, pageSize,
keyword, keyword,
filterListUser, // filterListUser,
showDialog, showDialog,
userName, userName,
password, password,
......
<template> <template>
<div class="row q-col-gutter-sm"> <div class="row q-col-gutter-sm flex-center q-mt-sm">
<div class="col-auto text-h6 text-weight-regular flex flex-center q-mr-md">
{{ $t('userPage.title') }}
<q-separator vertical spaced />
</div>
<q-space></q-space>
<div class="col-2">
<q-input
v-model="keyword"
dense
outlined
:label="$t('userPage.tableColumns.keywordSearch')"
clearable
></q-input>
</div>
<div class="col-auto">
<q-btn
color="primary"
no-caps
:label="$t('crudActions.search')"
style="width: 100px"
@click="getListUsers"
>
</q-btn>
</div>
<div class="col-auto">
<q-btn
color="primary"
no-caps
:label="$t('crudActions.add')"
style="width: 100px"
@click="openAddUserDialog"
>
</q-btn>
</div>
<div class="col-12"> <div class="col-12">
<q-table <q-table
:rows="filterListUser" :rows="userTableRows"
:columns="userTableColumns" :columns="userTableColumns"
row-key="name" row-key="name"
separator="cell" separator="cell"
hide-pagination hide-pagination
:no-data-label="$t('emptyData')" :no-data-label="$t('emptyData')"
> >
<template v-slot:top> <!-- <template v-slot:top>
<q-th class="full-width"> <q-th class="full-width">
<div class="row"> <div class="row">
<div <div
class="col-auto text-h6 text-weight-regular flex flex-center q-mr-md" class="col-auto text-h6 text-weight-regular flex flex-center q-mr-md"
> >
{{ $t('userPage.title') }}
</div> </div>
<q-separator vertical spaced /> <q-separator vertical spaced />
<div class="col-5 q-ml-md"> <div class="col-5 q-ml-md">
...@@ -33,7 +67,7 @@ ...@@ -33,7 +67,7 @@
</div> </div>
</div> </div>
</q-th> </q-th>
</template> </template> -->
<template v-slot:body-cell-status="rowData"> <template v-slot:body-cell-status="rowData">
<q-td> <q-td>
<div align="center"> <div align="center">
...@@ -79,8 +113,8 @@ ...@@ -79,8 +113,8 @@
flat flat
round round
color="primary" color="primary"
icon="delete" icon="mdi-delete-outline"
@click="confirmDeleteUser(item.row.id)" @click="confirmDeleteUser(item.row.id, item.row.userName)"
> >
<q-tooltip :offset="[20, 10]">{{ <q-tooltip :offset="[20, 10]">{{
$t('userPage.toolTipMessage.deleteUser') $t('userPage.toolTipMessage.deleteUser')
......
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