浏览代码

调整接口

songzhen 4 月之前
父节点
当前提交
877c2350e3

+ 2 - 2
src/components/Home/HotTravelProject.vue

@@ -17,7 +17,7 @@
         <div
           class="flex items-center px-10 absolute bottom-0 left-0 right-0 h-45 bg-gradient-to-b from-white to-[#020202] text-white"
         >
-          <span class="truncate text-base">{{ item.projectTitle }}</span>
+          <span class="truncate text-base">{{ item.shortTitle }}</span>
         </div>
       </NuxtLink>
     </div>
@@ -26,7 +26,7 @@
 
 <script setup>
 const { data } = await useMyFetch(
-  `website/tourism/project/list?isHotspot=1&pageNum=1&pageSize=4`
+  `website/tourism/projectTravelNotes/homeList?pageNum=1&pageSize=4`
 );
 const hotTravelProjectList = computed(() => data.value?.dataList);
 </script>

+ 22 - 15
src/components/Travel/FirstLevelDirectoryMenu/index.vue

@@ -2,16 +2,16 @@
   <div class="flex flex-col w-80 bg-[#F6F8FA] box-border">
     <div
       v-for="item in menuData"
-      :key="item.id"
+      :key="item.areaId"
       @click="handleChange(item)"
       class="h-40 flex items-center rounded-r-lg justify-start pl-10 transition-all text-base"
       :class="[
-        currentMenu.id === item.id
+        currentMenu.areaId === item.areaId
           ? 'bg-primary text-white'
           : 'bg-transparent text-black-3',
       ]"
     >
-      {{ item.menuName }}
+      {{ item.areaName }}
     </div>
   </div>
 </template>
@@ -20,23 +20,30 @@
 const emit = defineEmits(["change"]);
 
 const { data } = await useMyFetch(
-  () => "website/basic/directoryList?parentId=0"
+  () => "website/tourism/projectTravelNotes/travelNotesDirectoryList"
 );
 
-const firstMenu = {
-  menuName: "全部",
-  id: null,
+const firstArea = {
+  areaName: "全部",
+  areaId: null,
 };
 
-const menuData = computed(() => {
-  return [
-    firstMenu,
-    ...(data.value?.dataList?.filter((x) => x.id != "16" && x.id != "10") ??
-      []),
-  ];
-});
+const menuData = ref([]);
 
-const currentMenu = ref(firstMenu);
+const currentMenu = ref({});
+
+watch(
+  data,
+  (val) => {
+    if (!val) return;
+    menuData.value = [firstArea, ...val];
+
+    if (menuData.value?.length) {
+      currentMenu.value = menuData.value[0];
+    }
+  },
+  { immediate: true }
+);
 
 function handleChange(item) {
   currentMenu.value = item;

+ 7 - 4
src/components/Travel/ProjectItem/index.vue

@@ -1,7 +1,11 @@
 <template>
   <NuxtLink class="flex py-10 border-b space-x-10" :to="`/yj/${itemData.id}`">
     <van-image
-      :src="itemData.homeHotPicturesAfterConvert[0]"
+      :src="
+        itemData.tourismUrlsAfterConvert.length
+          ? itemData.tourismUrlsAfterConvert[0]
+          : ''
+      "
       fit="cover"
       class="w-108 h-114 shrink rounded-lg overflow-hidden"
     />
@@ -20,9 +24,8 @@
           </div>
         </div>
         <div class="mt-5 flex items-center space-x-10 text-sm text-[#666666B2]">
-          <span>{{ itemData.startPlace }}出发</span>
-          <div class="h-10 w-1 bg-[#f3f3f3]"></div>
-          <span>{{ itemData.countTimes }}天</span>
+          <span v-if="itemData.startPlace">{{ itemData.startPlace }}出发</span>
+          <span>{{ itemData.countTimes }}</span>
         </div>
       </div>
       <!-- <div class="flex items-center justify-between">

+ 0 - 72
src/pages/travel-detail/[id].vue

@@ -1,72 +0,0 @@
-<template>
-  <div>
-    <Navbar title="产品详情" />
-    {{ pending }}
-    <!-- <TravelDetailBanner :banner-list="bannerList" />
-    <div class="px-10 pt-10 pb-100">
-      <div class="text-base text-black-3 font-semibold">
-        {{ detailData?.projectTitle }}
-      </div>
-      <div class="mt-5 flex items-center">
-        <div
-          v-for="item in lableList"
-          :key="item"
-          class="flex h-18 items-center justify-center rounded-sm border border-[#FD9A00] px-8 text-sm text-[#FD9A00]"
-        >
-          {{ item }}
-        </div>
-      </div>
-      <div class="mt-10 flex items-center space-x-8 text-sm text-[#666666B2]">
-        <span>{{ detailData?.startPlace }}出发</span>
-        <div class="h-10 w-1 bg-[#DDDDDD]"></div>
-        <span>{{ detailData?.countTimes }}</span>
-      </div>
-      <div class="flex items-center mt-10">
-        <div v-if="detailData?.price" class="text-sm text-[#ff0000]">
-          <span>¥</span>
-          <span class="text-4xl font-semibold">{{ detailData.price }}</span>
-          <span>起</span>
-        </div>
-      </div>
-      <div>
-        <div class="text-base mt-15">
-          <TravelDetailTabs @change="handleTabsChange" />
-          <div v-if="currentTab === 0">
-            <div v-html="detailData.tourismContent?.content"></div>
-          </div>
-          <div v-else-if="currentTab === 1">
-            <div v-html="detailData.tourismContent?.costDescription"></div>
-          </div>
-          <div v-else>
-            <div v-html="detailData.tourismContent?.bookingNotice"></div>
-          </div>
-        </div>
-      </div>
-    </div>
-
-    <div
-      class="fixed z-[999] bottom-0 w-full right-0 left-0 h-60 border-t flex items-center justify-center px-20 bg-white"
-    >
-      <div
-        class="h-44 bg-gradient-to-r rounded-lg from-[#ff6330] text-white flex items-center justify-center to-[#fe8c2c] w-full"
-        @click="handleBook"
-      >
-        立即预定
-      </div>
-    </div>
-    <div class="van-safe-area-bottom"></div> -->
-  </div>
-</template>
-
-<script setup>
-const id = useRouteParam("id");
-const { data: detailData, status } = useMyFetch(
-  `website/tourism/project/detail?id=${id.value}`
-);
-
-const lableList = computed(() => {
-  return detailData.value?.projectLabel?.split("&") ?? [];
-});
-</script>
-
-<style lang="scss" scoped></style>

+ 90 - 0
src/pages/travel-notes/index.vue

@@ -0,0 +1,90 @@
+<template>
+  <div>
+    <!-- <Navbar :title="`${menuName ?? ''}精品旅游`" /> -->
+    <div class="px-10 pt-20">
+      <van-search
+        v-model="searchStr"
+        placeholder="请输入搜索关键词"
+        shape="round"
+        @search="onSearch"
+      >
+      </van-search>
+      <van-list
+        v-if="dataList.length"
+        v-model:loading="loading"
+        :immediate-check="false"
+        :finished="finished"
+        finished-text=""
+        @load="loadMore"
+      >
+        <TravelProjectItem
+          v-for="item in dataList"
+          :key="item.id"
+          :item-data="item"
+        />
+      </van-list>
+      <Empty v-else-if="!dataList.length && !loading" />
+    </div>
+  </div>
+</template>
+
+<script setup>
+const menuName = useRouteQuery("menuName");
+
+const areaId = useRouteQuery("areaId");
+
+const countryId = useRouteQuery("countryId");
+
+// const id = useRouteParam("id");
+
+const searchStr = ref("");
+const dataList = ref([]);
+const loading = ref(false);
+const finished = ref(false);
+const pageNum = ref(1);
+const pageSize = ref(10);
+async function getProjects() {
+  const { data } = await request(
+    `website/tourism/projectTravelNotes/travelNotesPageList`,
+    {
+      query: {
+        pageNum: pageNum.value,
+        pageSize: pageSize.value,
+        // belongTab: id.value,
+        areaId: areaId.value,
+        countryId: countryId.value,
+        searchString: searchStr.value,
+      },
+    }
+  );
+  dataList.value = dataList.value.concat(data.dataList);
+  loading.value = false;
+  if (dataList.value.length >= data.totalCount) {
+    finished.value = true;
+  } else {
+    finished.value = false;
+  }
+}
+
+function loadMore() {
+  pageNum.value++;
+  getProjects();
+}
+
+function onSearch() {
+  pageNum.value = 1;
+  dataList.value = [];
+  // finished.value = false;
+  getProjects();
+}
+
+onMounted(() => {
+  getProjects();
+});
+
+useSeoMeta({
+  title: `${menuName.value}精品旅游`,
+});
+</script>
+
+<style lang="scss" scoped></style>

+ 9 - 3
src/pages/travel/[id].vue

@@ -1,6 +1,5 @@
-<template>
+<!-- <template>
   <div>
-    <!-- <Navbar :title="`${menuName ?? ''}精品旅游`" /> -->
     <div class="px-10 pt-20">
       <van-search
         v-model="searchStr"
@@ -65,7 +64,6 @@ function loadMore() {
 function onSearch() {
   pageNum.value = 1;
   dataList.value = [];
-  // finished.value = false;
   getProjects();
 }
 
@@ -78,4 +76,12 @@ useSeoMeta({
 });
 </script>
 
+<style lang="scss" scoped></style> -->
+
+<template>
+  <div></div>
+</template>
+
+<script setup></script>
+
 <style lang="scss" scoped></style>

+ 2 - 2
src/pages/travel/index.vue

@@ -18,7 +18,7 @@
           <NuxtLink
             v-for="item in rightData"
             :key="item"
-            :to="`/travel/${item.id}?menuName=${item.menuName}`"
+            :to="`/travel-notes?menuName=${item.menuName}&areaId=${item.parentId}&countryId=${item.id}`"
             class="flex flex-col w-83 aspect-1 space-y-8 art items-center"
           >
             <van-image
@@ -42,7 +42,7 @@
 
 <script setup>
 function handleMenuChange(menu) {
-  getRightData(menu.id);
+  getRightData(menu.areaId);
 }
 
 const rightData = ref([]);

+ 11 - 7
src/pages/yj/[id].vue

@@ -1,7 +1,6 @@
 <template>
   <div>
     <div v-if="['success'].includes(status)">
-      <!-- <Navbar title="产品详情" /> -->
       <img
         :src="
           detailData.travelNotesBannerAfterConvert?.length
@@ -24,15 +23,12 @@
           </div>
         </div>
         <div class="mt-10 items-center text-xl text-[#666666B2]">
-          <div>出行天数 {{ detailData.countTimes }}</div>
+          <div>出行天数 {{ detailData.countTimes }}</div>
           <div class="mt-10" v-if="detailData.contactDescription">
             专业一站式导游服务请联系{{ detailData.contactDescription }}
           </div>
         </div>
-        <div
-          v-html="detailData.tourismContent.content"
-          class="mt-15 text-xl text-black-3"
-        ></div>
+        <div v-html="htmlContent" class="mt-15 text-xl text-black-3"></div>
       </div>
     </div>
   </div>
@@ -40,10 +36,18 @@
 
 <script setup>
 const id = useRouteParam("id");
+
 const { data: detailData, status } = useMyFetch(
-  `website/tourism/project/detail?id=${id.value}`
+  `website/tourism/projectTravelNotes/travelNotesDetail?id=${id.value}`
 );
 
+const htmlContent = computed(() => {
+  return detailData?.value?.tourTourismTravelNotesContent?.content?.replace(
+    /<img/g,
+    "<img style='width:100%; height:auto;'"
+  );
+});
+
 const lableList = computed(() => {
   return detailData.value?.projectLabel?.split("&") ?? [];
 });