Commit de9fafa4 authored by Tình Trương's avatar Tình Trương

update

parent bd220fcd
...@@ -65,4 +65,6 @@ export enum API_PATHS { ...@@ -65,4 +65,6 @@ export enum API_PATHS {
addField = 'field/add', addField = 'field/add',
updateField = 'field/update', updateField = 'field/update',
getDetailField = 'field/detail', getDetailField = 'field/detail',
getListPost = 'post',
deletePost = 'post/delete',
} }
...@@ -313,3 +313,15 @@ export type DetailField = { ...@@ -313,3 +313,15 @@ export type DetailField = {
description: string; description: string;
status: number; status: number;
}; };
export type Post = {
id: number;
name: string;
image: string;
category: string;
createBy: string;
createTime: string;
updateBy: string;
updateTime: string;
status: number;
};
...@@ -32,13 +32,13 @@ ...@@ -32,13 +32,13 @@
<div class="row q-col-gutter-sm"> <div class="row q-col-gutter-sm">
<div class="col-6"> <div class="col-6">
<q-input <q-input
:model-value="avatar" :model-value="image"
@update:model-value="$emit('update:avatar', $event)" @update:model-value="$emit('update:image', $event)"
:label="$t('post.dialogLabel.postLabels.avatar')" :label="$t('post.dialogLabel.postLabels.image')"
type="text" type="text"
class="q-my-sm" class="q-my-sm"
outlined outlined
:rules="avatarRules" :rules="imageRules"
clearable clearable
></q-input> ></q-input>
</div> </div>
...@@ -119,17 +119,17 @@ export default defineComponent({ ...@@ -119,17 +119,17 @@ export default defineComponent({
required: true, required: true,
}, },
isUpdate: { type: Boolean, default: false }, isUpdate: { type: Boolean, default: false },
avatar: { type: String, required: true }, image: { type: String, required: true },
name: { type: String, required: true }, name: { type: String, required: true },
description: { type: String, required: true }, description: { type: String, required: true },
content: { type: String, required: true }, content: { type: String, required: true },
status: { type: Number, required: true }, status: { type: Number, required: true },
}, },
setup() { setup() {
const avatarRules = [ const imageRules = [
(val?: string) => (val?: string) =>
(val && val.trim().length) || (val && val.trim().length) ||
i18n.global.t('post.validateMessages.requireAvatar'), i18n.global.t('post.validateMessages.requireImage'),
]; ];
const contentRules = [ const contentRules = [
(val?: string) => (val?: string) =>
...@@ -144,12 +144,12 @@ export default defineComponent({ ...@@ -144,12 +144,12 @@ export default defineComponent({
return { return {
contentRules, contentRules,
nameRules, nameRules,
avatarRules, imageRules,
}; };
}, },
emits: [ emits: [
'update:isOpened', 'update:isOpened',
'update:avatar', 'update:image',
'update:name', 'update:name',
'update:description', 'update:description',
'update:content', 'update:content',
......
...@@ -628,11 +628,11 @@ export default { ...@@ -628,11 +628,11 @@ export default {
tableColumnsPost: { tableColumnsPost: {
stt: 'STT', stt: 'STT',
name: 'Tên bài viết', name: 'Tên bài viết',
avatar: 'Avatar', image: 'Avatar',
category: 'Danh mục bài viết', category: 'Danh mục bài viết',
addUser: 'Người thêm', createBy: 'Người thêm',
addTime: 'Thời gian thêm', createTime: 'Thời gian thêm',
updateUser: 'Người cập nhập', updateBy: 'Người cập nhập',
updateTime: 'Thời gian cập nhật', updateTime: 'Thời gian cập nhật',
status: 'Trạng thái', status: 'Trạng thái',
action: 'Chức năng', action: 'Chức năng',
...@@ -648,7 +648,7 @@ export default { ...@@ -648,7 +648,7 @@ export default {
}, },
postLabels: { postLabels: {
name: 'Tên bài viết *', name: 'Tên bài viết *',
avatar: 'Avatar *', image: 'Avatar *',
description: 'Mô tả', description: 'Mô tả',
content: 'Nội dung *', content: 'Nội dung *',
status: 'Trạng thái', status: 'Trạng thái',
...@@ -664,10 +664,10 @@ export default { ...@@ -664,10 +664,10 @@ export default {
}, },
validateMessages: { validateMessages: {
requireName: 'Vui lòng nhập Tên bài viết', requireName: 'Vui lòng nhập Tên bài viết',
requireAvatar: 'Vui lòng chọn Avatar', requireImage: 'Vui lòng chọn Avatar',
requireContent: 'Vui lòng nhập Nội dung', requireContent: 'Vui lòng nhập Nội dung',
}, },
confirmActionsPost: { confirmActionsTitle: {
confirmDeletePostTitle: 'Xác nhận', confirmDeletePostTitle: 'Xác nhận',
confirmDeletePostCancelBtnLabel: 'Huỷ', confirmDeletePostCancelBtnLabel: 'Huỷ',
confirmDeletePostContent: 'Bạn có chắc chắn muốn xoá bài viết này không?', confirmDeletePostContent: 'Bạn có chắc chắn muốn xoá bài viết này không?',
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
class="sticky-header-table" class="sticky-header-table"
> >
<template v-slot:body-cell-action="item"> <template v-slot:body-cell-action="item">
<q-td style="padding: 0" class="flex flex-center"> <q-td style="padding: 0" class="center">
<q-btn <q-btn
flat flat
round round
...@@ -71,13 +71,13 @@ ...@@ -71,13 +71,13 @@
</q-btn> </q-btn>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-avatar="avatar"> <template v-slot:body-cell-image="image">
<q-td style="padding: 0; height: 100%" class="flex flex-center"> <q-td style="padding: auto; height: 100%" class="center">
<q-img <q-img
style="width: 7rem" style="width: 7rem"
fit="contain" fit="contain"
:ratio="16 / 9" :ratio="16 / 9"
:src="avatar.row.avatar" :src="image.row.image"
></q-img> ></q-img>
</q-td> </q-td>
</template> </template>
...@@ -103,11 +103,21 @@ ...@@ -103,11 +103,21 @@
</q-table> </q-table>
</div> </div>
<div class="col-12 q-mt-sm">
<Pagination
v-model:currentPage="pageIndex"
v-model:pageSize="pageSize"
:totalPage="totalPage"
@update:pageSize="changePageSize"
@update:currentPage="getListPost"
/>
</div>
<AddUpdatePostDialog <AddUpdatePostDialog
v-model:isOpened="addPostDialogIsOpened" v-model:isOpened="addPostDialogIsOpened"
v-model:name="name" v-model:name="name"
v-model:description="description" v-model:description="description"
v-model:avatar="avatar" v-model:image="image"
v-model:content="content" v-model:content="content"
v-model:status="status" v-model:status="status"
isUpdate isUpdate
...@@ -118,7 +128,7 @@ ...@@ -118,7 +128,7 @@
v-model:isOpened="updatePostDialogIsOpened" v-model:isOpened="updatePostDialogIsOpened"
v-model:name="name" v-model:name="name"
v-model:description="description" v-model:description="description"
v-model:avatar="avatar" v-model:image="image"
v-model:content="content" v-model:content="content"
v-model:status="status" v-model:status="status"
@savePostInfo="updateNewPost" @savePostInfo="updateNewPost"
...@@ -129,17 +139,19 @@ ...@@ -129,17 +139,19 @@
<script lang="ts"> <script lang="ts">
import { i18n } from 'src/boot/i18n'; import { i18n } from 'src/boot/i18n';
import { defineComponent, onMounted, ref, Ref } from 'vue'; import { defineComponent, onMounted, ref, Ref } from 'vue';
// import { API_PATHS } from 'src/assets/configurations'; import Pagination from 'components/pagination/index.vue';
// import { AxiosResponse } from 'axios'; import { API_PATHS } from 'src/assets/configurations';
// import { api, BaseResponseBody } from 'src/boot/axios'; import { AxiosResponse } from 'axios';
// import { Post, AddPost, DetailPost, UpdatePost } from 'src/assets/type'; import { api, BaseResponseBody } from 'src/boot/axios';
// import { config } from 'src/assets/configurations'; import { PaginationResponse, Post } from 'src/assets/type';
import { config } from 'src/assets/configurations';
import { PostStatus } from 'src/assets/enums'; import { PostStatus } from 'src/assets/enums';
import AddUpdatePostDialog from 'components/add-update-post/index.vue'; import AddUpdatePostDialog from 'components/add-update-post/index.vue';
import { Dialog, Notify } from 'quasar'; import { Dialog, Notify } from 'quasar';
export default defineComponent({ export default defineComponent({
components: { components: {
Pagination,
AddUpdatePostDialog, AddUpdatePostDialog,
}, },
setup() { setup() {
...@@ -162,10 +174,10 @@ export default defineComponent({ ...@@ -162,10 +174,10 @@ export default defineComponent({
sortable: false, sortable: false,
}, },
{ {
name: 'avatar', name: 'image',
field: 'avatar', field: 'image',
required: true, required: true,
label: i18n.global.t('post.tableColumnsPost.avatar'), label: i18n.global.t('post.tableColumnsPost.image'),
headerStyle: 'text-align: center !important;', headerStyle: 'text-align: center !important;',
align: 'center', align: 'center',
sortable: false, sortable: false,
...@@ -180,28 +192,28 @@ export default defineComponent({ ...@@ -180,28 +192,28 @@ export default defineComponent({
sortable: false, sortable: false,
}, },
{ {
name: 'addUser', name: 'createBy',
field: 'addUser', field: 'createBy',
required: true, required: true,
label: i18n.global.t('post.tableColumnsPost.addUser'), label: i18n.global.t('post.tableColumnsPost.createBy'),
headerStyle: 'text-align: center !important;', headerStyle: 'text-align: center !important;',
align: 'left', align: 'left',
sortable: false, sortable: false,
}, },
{ {
name: 'addTime', name: 'createTime',
field: 'addTime', field: 'createTime',
required: true, required: true,
label: i18n.global.t('post.tableColumnsPost.addTime'), label: i18n.global.t('post.tableColumnsPost.createTime'),
headerStyle: 'text-align: center !important;', headerStyle: 'text-align: center !important;',
align: 'left', align: 'left',
sortable: false, sortable: false,
}, },
{ {
name: 'updateUser', name: 'updateBy',
field: 'updateUser', field: 'updateBy',
required: true, required: true,
label: i18n.global.t('post.tableColumnsPost.updateUser'), label: i18n.global.t('post.tableColumnsPost.updateBy'),
headerStyle: 'text-align: center !important;', headerStyle: 'text-align: center !important;',
align: 'left', align: 'left',
sortable: false, sortable: false,
...@@ -235,69 +247,82 @@ export default defineComponent({ ...@@ -235,69 +247,82 @@ export default defineComponent({
}, },
]; ];
const pageIndex = ref(1);
const pageSize = ref(20);
const totalPage = ref(1);
const postTableRows: Ref<unknown[]> = ref([]); const postTableRows: Ref<unknown[]> = ref([]);
const addPostDialogIsOpened = ref(false); const addPostDialogIsOpened = ref(false);
const updatePostDialogIsOpened = ref(false); const updatePostDialogIsOpened = ref(false);
const description = ref(''); const description = ref('');
const name = ref(''); const name = ref('');
const content = ref(''); const content = ref('');
const avatar = ref(''); const image = ref('');
const status: Ref<number> = ref(PostStatus.active); const status: Ref<number> = ref(PostStatus.active);
const postId: Ref<number | undefined> = ref(undefined); const postId: Ref<number | undefined> = ref(undefined);
const namePost = ref(''); const namePost = ref('');
const changePageSize = () => {
pageIndex.value = 1;
void getListPost();
};
//gọi api ds //gọi api ds
const getListPost = async () => { const getListPost = async () => {
// const response = (await api({ const response = (await api({
// url: API_PATHS.getListPost, url: API_PATHS.getListPost,
// method: 'GET', method: 'GET',
// params: { params: {
// name: namePost.value, pageIndex: pageIndex.value,
// }, pageSize: pageSize.value,
// })) as AxiosResponse<BaseResponseBody<[]>>; name: namePost.value,
// if (response.data.error.code === config.API_RES_CODE.OK.code) { },
// postTableRows.value = response.data.data; })) as AxiosResponse<BaseResponseBody<PaginationResponse<Post>>>;
// } if (response.data.error.code === config.API_RES_CODE.OK.code) {
postTableRows.value = response.data.data.data;
totalPage.value = response.data.data.totalPages;
}
}; };
const confirmDeletePost = (id: number) => { const confirmDeletePost = (id: number) => {
Dialog.create({ Dialog.create({
// title: i18n.global.t('post.confirmActionsTitle.confirmDeletePostTitle'), title: i18n.global.t('post.confirmActionsTitle.confirmDeletePostTitle'),
// message: i18n.global.t( message: i18n.global.t(
// 'field.confirmActionsTitle.confirmDeletePostContent' 'post.confirmActionsTitle.confirmDeletePostContent'
// ), ),
// cancel: i18n.global.t( cancel: i18n.global.t(
// 'field.confirmActionsTitle.confirmDeletePostCancelBtnLabel' 'post.confirmActionsTitle.confirmDeletePostCancelBtnLabel'
// ), ),
// color: 'negative', color: 'negative',
// }).onOk(() => { }).onOk(() => {
// void deletePost(id); void deletePost(id);
}); });
}; };
//gói api xóa //gói api xóa
const deletePost = async (id: number) => { const deletePost = async (id: number) => {
// try { try {
// const deleteResult = (await api({ const deleteResult = (await api({
// // url: API_PATHS.deletePost, url: API_PATHS.deletePost,
// method: 'GET', method: 'GET',
// params: { params: {
// id: id, id: id,
// }, },
// })) as AxiosResponse<BaseResponseBody<unknown>>; })) as AxiosResponse<BaseResponseBody<unknown>>;
// if (deleteResult.data.error.code === config.API_RES_CODE.OK.code) { if (deleteResult.data.error.code === config.API_RES_CODE.OK.code) {
// Notify.create({ Notify.create({
// type: 'positive', type: 'positive',
// message: i18n.global.t('post.actionMessages.deletePostAccess'), message: i18n.global.t('post.actionMessages.deletePostAccess'),
// }); });
// void getListPost(); void getListPost();
// } }
// } catch (error) {} } catch (error) {}
}; };
const openAddPostDialog = () => { const openAddPostDialog = () => {
name.value = ''; name.value = '';
description.value = ''; description.value = '';
content.value = '';
image.value = '';
status.value = PostStatus.active; status.value = PostStatus.active;
addPostDialogIsOpened.value = true; addPostDialogIsOpened.value = true;
}; };
...@@ -377,6 +402,10 @@ export default defineComponent({ ...@@ -377,6 +402,10 @@ export default defineComponent({
void getListPost(); void getListPost();
}); });
return { return {
pageIndex,
pageSize,
totalPage,
changePageSize,
addPostDialogIsOpened, addPostDialogIsOpened,
updatePostDialogIsOpened, updatePostDialogIsOpened,
postTableColumns, postTableColumns,
...@@ -395,7 +424,7 @@ export default defineComponent({ ...@@ -395,7 +424,7 @@ export default defineComponent({
updateNewPost, updateNewPost,
namePost, namePost,
content, content,
avatar, image,
postId, postId,
}; };
}, },
......
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