Commit b4243afb authored by Nguyễn Hải Sơn's avatar Nguyễn Hải Sơn
parents 1c94c01d 85acb8f0
...@@ -31,16 +31,43 @@ ...@@ -31,16 +31,43 @@
> >
<div class="row q-col-gutter-sm"> <div class="row q-col-gutter-sm">
<div class="col-6"> <div class="col-6">
<q-input <div>
:model-value="image" <q-card style="margin-bottom: 8px" v-if="image !== null">
@update:model-value="$emit('update:image', $event)" <q-img :src="image" style="height: 180px; width: 135px">
:label="$t('post.dialogLabel.postLabels.image')" </q-img>
type="text" <q-icon
class="q-my-sm" name="mdi-close-circle"
outlined color="red"
:rules="imageRules" style="position: absolute; right: 0; font-size: 18px"
clearable ></q-icon>
></q-input> </q-card>
<q-card v-else style="margin-bottom: 8px">
<q-img
src="~/assets/noavatar.png"
style="height: 180px; width: 135px"
></q-img>
</q-card>
<q-card @click="uploadAvatar">
<div align="center" class="flex flex-center q-py-xs">
<q-icon
name="mdi-plus-circle-outline"
:size="'xs'"
></q-icon>
<div class="q-mt-xs">
{{ $t('uploadImage.uploadBanner') }}
</div>
</div>
<input
ref="upload"
hidden
type="file"
@change="selectedFile($event.target.files)"
accept="image/png, image/jpeg"
/>
</q-card>
</div>
</div> </div>
<div class="col-6"> <div class="col-6">
<q-input <q-input
...@@ -109,7 +136,7 @@ ...@@ -109,7 +136,7 @@
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue'; import { defineComponent, ref } from 'vue';
import { i18n } from 'src/boot/i18n'; import { i18n } from 'src/boot/i18n';
export default defineComponent({ export default defineComponent({
...@@ -125,7 +152,22 @@ export default defineComponent({ ...@@ -125,7 +152,22 @@ export default defineComponent({
content: { type: String, required: true }, content: { type: String, required: true },
status: { type: Number, required: true }, status: { type: Number, required: true },
}, },
setup() { setup(props, context) {
const selectedFile = (value: FileList) => {
console.log(value, 'valueee image');
// console.log(URL.createObjectURL(value[0]));
context.emit('SetAvatar', {
file: value[0],
url: URL.createObjectURL(value[0]),
});
};
const upload = ref(null);
const uploadAvatar = () => {
// eslint-disable-next-line
// @ts-ignore
// eslint-disable-next-line
upload.value?.click();
};
const imageRules = [ const imageRules = [
(val?: string) => (val?: string) =>
(val && val.trim().length) || (val && val.trim().length) ||
...@@ -145,6 +187,9 @@ export default defineComponent({ ...@@ -145,6 +187,9 @@ export default defineComponent({
contentRules, contentRules,
nameRules, nameRules,
imageRules, imageRules,
selectedFile,
upload,
uploadAvatar,
}; };
}, },
emits: [ emits: [
...@@ -155,6 +200,7 @@ export default defineComponent({ ...@@ -155,6 +200,7 @@ export default defineComponent({
'update:content', 'update:content',
'update:status', 'update:status',
'savePostInfo', 'savePostInfo',
'SetAvatar',
], ],
}); });
</script> </script>
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
<div class="col-8 flex flex-center"> <div class="col-8 flex flex-center">
<div> <div>
<q-card style="margin-bottom: 8px" v-if="avatar !== null"> <q-card style="margin-bottom: 8px" v-if="avatar !== null">
<q-img :src="avatar" style="height: 180px; width: 135px"> </q-img> <q-img :src="avatar" style="height: 180px; width: 135px"></q-img>
<q-icon <q-icon
name="mdi-close-circle" name="mdi-close-circle"
color="red" color="red"
......
...@@ -45,30 +45,39 @@ ...@@ -45,30 +45,39 @@
hide-pagination hide-pagination
class="sticky-header-table" class="sticky-header-table"
> >
<template v-slot:body-cell-STT="item">
<q-td style="padding: 0; height: 100%">
<div align="center">
{{ item.rowIndex + 1 }}
</div>
</q-td>
</template>
<template v-slot:body-cell-action="item"> <template v-slot:body-cell-action="item">
<q-td style="padding: 0" class="center"> <q-td style="padding: 0">
<q-btn <div align="center">
flat <q-btn
round flat
color="primary" round
icon="mdi-account-edit-outline" color="primary"
@click="openUpdatePostDialog(item.row.id)" icon="mdi-account-edit-outline"
> @click="openUpdatePostDialog(item.row.id)"
<q-tooltip :offset="[20, 10]">{{ >
$t('post.toolTipMessage.updatePost') <q-tooltip :offset="[20, 10]">{{
}}</q-tooltip> $t('post.toolTipMessage.updatePost')
</q-btn> }}</q-tooltip>
<q-btn </q-btn>
flat <q-btn
round flat
color="primary" round
icon="mdi-delete-outline" color="primary"
@click="confirmDeletePost(item.row.id)" icon="mdi-delete-outline"
> @click="confirmDeletePost(item.row.id)"
<q-tooltip :offset="[20, 10]">{{ >
$t('post.toolTipMessage.deletePost') <q-tooltip :offset="[20, 10]">{{
}}</q-tooltip> $t('post.toolTipMessage.deletePost')
</q-btn> }}</q-tooltip>
</q-btn>
</div>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-image="image"> <template v-slot:body-cell-image="image">
...@@ -121,6 +130,7 @@ ...@@ -121,6 +130,7 @@
v-model:content="content" v-model:content="content"
v-model:status="status" v-model:status="status"
isUpdate isUpdate
@SetAvatar="setAvatar"
@savePostInfo="addNewPost" @savePostInfo="addNewPost"
/> />
...@@ -156,14 +166,14 @@ export default defineComponent({ ...@@ -156,14 +166,14 @@ export default defineComponent({
}, },
setup() { setup() {
const postTableColumns = [ const postTableColumns = [
// { {
// name: 'index', name: 'STT',
// field: 'index', field: 'STT',
// required: true, required: true,
// label: 'STT', label: 'STT',
// align: 'center', align: 'center',
// sortable: false, sortable: false,
// }, },
{ {
name: 'name', name: 'name',
field: 'name', field: 'name',
...@@ -397,6 +407,9 @@ export default defineComponent({ ...@@ -397,6 +407,9 @@ export default defineComponent({
// void getListPost(); // void getListPost();
// } // }
}; };
const setAvatar = (value: { file?: File; url?: string }) => {
image.value = value.url as string;
};
onMounted(() => { onMounted(() => {
void getListPost(); void getListPost();
...@@ -426,6 +439,7 @@ export default defineComponent({ ...@@ -426,6 +439,7 @@ export default defineComponent({
content, content,
image, image,
postId, postId,
setAvatar,
}; };
}, },
}); });
......
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