123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- <template>
- <div style="height: calc(100vw * 0.59)" class="w-full">
- <div
- v-if="!bannerUrl"
- class="flex h-full w-full items-center justify-center bg-[url('~/assets/img/note-create/note_create_banner_bg.png')]"
- >
- <div
- @click="handleSelectImage"
- class="flex h-40 w-150 active:bg-[#000]/[0.1] bg-[#FFFFFF]/[0.2] items-center justify-center space-x-10 rounded-full border-2 border-white"
- >
- <div class="w-16 h-16">
- <van-image width="100%" height="100%" :src="icon_image_fill" />
- </div>
- <span class="text-sm font-normal pt-4 text-[#FF9300]">设置游记头图</span>
- </div>
- </div>
- <div v-else class="relative h-full w-full">
- <img :src="bannerUrl" class="h-full w-full" alt="" />
- <div
- @click="open"
- class="absolute rounded-full bottom-10 right-10 flex cursor-pointer items-center space-x-8 bg-[#00000080] px-15 py-8 hover:opacity-90"
- >
- <div class="w-16 h-16">
- <van-image width="100%" height="100%" :src="image" />
- </div>
- <span class="text-base text-white">重新上传头图</span>
- </div>
- </div>
-
-
-
-
-
-
-
- </div>
- </template>
- <script setup>
- import { useFileDialog } from '@vueuse/core'
- import icon_image_fill from '~/assets/img/note-create/icon-image-fill.png'
- import image from '~/assets/img/note-create/image.svg'
- const bannerUrl = defineModel('bannerUrl')
- const { open, onChange } = useFileDialog({
- accept: '.png,.png,.jpeg,.JPG,Png '
- })
- function handleSelectImage() {
- open()
- }
- onChange(async (files) => {
- if (!files.length) return
- const reader = new FileReader()
- reader.readAsDataURL(files[0])
- reader.onload = () => {
- bannerUrl.value = reader.result
- handleCropperOk(files[0])
- }
- })
- const loading = ref(false)
- async function handleCropperOk(data) {
- try {
- loading.value = true
-
- const formData = new FormData()
- formData.append('uploadFile', data)
- formData.append('asImage', true)
- formData.append('fieldName', 'travelNotesBanner')
- const res = await request('/admin/app/tourismProjectTravelNotesWrite/upload', {
- method: 'post',
- body: formData
- })
- const url = res.data.fileUrl
- loading.value = true
- bannerUrl.value = url
- } finally {
- loading.value = false
- }
- }
- </script>
- <style lang="scss" scoped></style>
|