Browse Source

fix:1.修改写游记的头图的拍照功能

suwenjiang 3 months ago
parent
commit
e9b35f6843

+ 2 - 0
src/components/CreateNote/Form.vue

@@ -151,6 +151,7 @@ import rate from '~/assets//img/note-create/rate.svg'
 const departureTime = defineModel('departureTime')
 const countTimes = defineModel('countTimes')
 const endPlace = defineModel('endPlace')
+const endPlaceId = defineModel('endPlaceId')
 const role = defineModel('role')
 const averageCost = defineModel('averageCost')
 const recommendationRate = defineModel('recommendationRate')
@@ -189,6 +190,7 @@ const showPicker = ref(false)
 const onConfirmAddr = ({ selectedValues, selectedOptions }) => {
   showPicker.value = false
   endPlace.value = selectedOptions[selectedValues.length - 1].menuName
+  endPlaceId.value = selectedOptions[selectedValues.length - 1].id
 }
 
 // 出行方式

+ 26 - 39
src/components/CreateNote/HeaderBanner.vue

@@ -92,51 +92,38 @@ function handleSelectImage() {
 
 onChange(async (files) => {
   if (!files.length) return
-  // const reader = new FileReader()
-  // reader.readAsDataURL(files[0])
-  // reader.onload = () => {
-
-  //   cropperDialogVisible.value = true
-  //   fileList.value = files[0]
-  // }
-  const formData = new FormData()
-  formData.append('uploadFile', files[0])
-  formData.append('asImage', true)
-  formData.append('fieldName', 'travelNotesBanner')
-  try {
-    let { data } = await request('/admin/app/tourismProjectTravelNotesWrite/upload', {
-      method: 'post',
-      body: formData
-    })
-    bannerUrl.value = data.fileUrl
-  } catch (error) {}
+  const reader = new FileReader()
+  reader.readAsDataURL(files[0])
+  reader.onload = () => {
+    bannerUrl.value = reader.result
+    handleCropperOk(files[0])
+  }
 })
 
 // const cropperRef = ref(null)
 // const cropperDialogVisible = ref(false)
-// const loading = ref(false)
-// async
+const loading = ref(false)
 
-// async function handleCropperOk() {
-//   try {
-//     // 此处需上传图片,保存URL
-//     const formData = new FormData()
+async function handleCropperOk(data) {
+  try {
+    loading.value = true
+    // 此处需上传图片,保存URL
+    const formData = new FormData()
 
-//     formData.append('uploadFile', fileList.value)
-//     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
-//     bannerUrl.value = url
-//     cropperDialogVisible.value = false
-//   } finally {
-//     loading.value = false
-//   }
-//   // })
-// }
+    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>

+ 1 - 1
src/components/Profile/Notes/Auditing/index.vue

@@ -3,7 +3,7 @@
     <!-- 审核中 -->
     <ProfileNotesEmpty v-if="!loading && !draftList.length" />
 
-    <div v-else-if="draftList.length" class="flex flex-col divide-y">
+    <div v-else-if="draftList.length">
       <ProfileNotesAuditingItem
         v-for="item in draftList"
         :key="item.id"

+ 1 - 1
src/components/Profile/Notes/Draft/Item.vue

@@ -1,6 +1,6 @@
 <template>
   <van-swipe-cell>
-    <div class="relative group flex space-x-10 p-10 mb-10 bg-[#fff] rounded-xl">
+    <div class="relative flex space-x-10 p-10 mb-10 bg-[#fff] rounded-xl">
       <img
         :src="formatImgSrc(data?.tourismUrlsAfterConvert) || noteDraftCoverBg"
         class="aspect-[4/3] h-109 shrink-0 rounded-xl object-cover"

+ 1 - 1
src/components/Profile/Notes/Draft/index.vue

@@ -9,7 +9,7 @@
           【您好,您还有{{ draftList?.length }}篇草稿没有完成,我们期待您的大作哦~】
         </p>
       </div>
-      <div class="grid grid-cols-1">
+      <div>
         <ProfileNotesDraftItem
           v-for="item in draftList"
           :key="item.id"

+ 8 - 3
src/components/Profile/Notes/Published/index.vue

@@ -87,9 +87,14 @@ const shareToWeChat = (type) => {
 
 const copyLink = () => {
   const url = `${import.meta.env.VITE_APP_BASE_URL}yj/${yjId.value}`
-  navigator.clipboard.writeText(url).then(() => {
-    showToast('链接已复制')
-  })
+  navigator.clipboard.writeText(url).then(
+    () => {
+      showNotify({ type: 'success', message: '链接已复制' })
+    },
+    () => {
+      showNotify({ message: '链接复制失败' })
+    }
+  )
 }
 // const { loading, setLoading } = useLoading()
 

+ 1 - 1
src/components/Profile/Notes/Rejected/index.vue

@@ -3,7 +3,7 @@
     <!-- 未通过 -->
     <ProfileNotesEmpty v-if="!loading && !draftList.length" />
 
-    <div v-else-if="draftList.length" class="grid grid-cols-1">
+    <div v-else-if="draftList.length">
       <ProfileNotesRejectedItem
         v-for="item in draftList"
         :key="item.id"

+ 23 - 26
src/pages/note-create/index.client.vue

@@ -2,7 +2,21 @@
   <div v-if="!loading" class="box-border pb-85">
     <div v-if="!previewOptions.show">
       <CreateNoteHeaderBanner v-model:bannerUrl="noteJson.travelNotesBanner" />
-
+      <div class="mt-12">
+        <van-cell-group class="border" inset>
+          <van-field
+            v-model="noteJson.projectTitle"
+            rows="1"
+            autosize
+            clearable
+            type="textarea"
+            @update:model-value="handleInsertOrEditProjectTitle"
+            placeholder="从这里开始游记大标题..."
+            maxlength="50"
+            show-word-limit
+          ></van-field>
+        </van-cell-group>
+      </div>
       <CreateNoteForm
         v-model:departureTime="noteJson.departureTime"
         v-model:countTimes="noteJson.countTimes"
@@ -18,21 +32,7 @@
         <div class="w-2 h-14 bg-[#FF9300] mr-16"></div>
         <h1 class="text-sm font-bold">编辑游记文章</h1>
       </div>
-      <div class="mb-12">
-        <van-cell-group class="border" inset>
-          <van-field
-            v-model="noteJson.projectTitle"
-            rows="1"
-            autosize
-            clearable
-            type="textarea"
-            @update:model-value="handleInsertOrEditProjectTitle"
-            placeholder="从这里开始游记大标题..."
-            maxlength="50"
-            show-word-limit
-          ></van-field>
-        </van-cell-group>
-      </div>
+
       <VueDraggable v-model="noteJson.travelNotesContent" :options="dragOptions">
         <template v-for="(item, index) in noteJson.travelNotesContent" :key="item.tmpId">
           <div v-if="item.type === defaultSectionTitle.type" class="h-50 mb-12 box-border">
@@ -151,7 +151,7 @@
                 <div
                   class="w-86 flex justify-between items-center h-16 absolute top-10 right-26 z-100"
                 >
-                  <span @click="handleSaveCover(item)" class="text-sm text-black-3">
+                  <span @click="showToast('请上传图片')" class="text-sm text-black-3">
                     设为封面图
                   </span>
                   <div class="w-16 h-16 inline-block">
@@ -432,6 +432,7 @@ const defaultNoteJson = {
   travelNotesBanner: null,
   projectTitle: null,
   departureTime: null,
+  endPlaceId: null,
   countTimes: null,
   endPlace: null,
   role: null,
@@ -598,15 +599,6 @@ async function handleCropperOk(data) {
 
 /******************插入图片逻辑*******************/
 
-// function handleInsertImageOk(fileUrlList) {
-//   const imageList = fileUrlList.map((e) => ({
-//     type: defaultSectionImage.type,
-//     content: e.fileUrl,
-//     tmpId: nanoid()
-//   }))
-//   noteJson.travelNotesContent = (noteJson.travelNotesContent ?? []).concat(imageList)
-// }
-
 function handleDeleteImage(index) {
   showConfirmDialog(deleteDialogContent)
     .then(() => {
@@ -707,9 +699,14 @@ async function handlePublish() {
 }
 
 const publishLoading = ref(false)
+// async
 async function requestPublish() {
   try {
     publishLoading.value = true
+
+    noteJson.endPlace = noteJson.endPlaceId
+    delete noteJson.endPlaceId
+    console.log(noteJson, 'noteJson')
     await request('/website/tourism/publishTravelNotes/publishDraft', {
       method: 'post',
       body: {