shaogen1995 9 місяців тому
батько
коміт
fa6873c391

+ 1 - 1
src/api/record.ts

@@ -1 +1 @@
-export const baseIMGUrl ='https://houseoss.4dkankan.com/project/bjfljtl/img'
+// export const baseIMGUrl ='https://houseoss.4dkankan.com/project/bjfljtl/img'

+ 8 - 4
src/api/request.ts

@@ -2,12 +2,16 @@ import axios from 'axios';
 
 
 //设置基地址
-// export const baseUrl = "https://wxfalangchang.4dage.com/api";
-// export const baseIMGUrl = "https://wxfalangchang.4dage.com";
-// export const baseUrl = "https://sit-ningguobwg.4dage.com/api/";
-export const baseIMGUrl = "";
+
+
+// 线下环境
 // export const baseIMGUrl = "https://sit-ningguobwg.4dage.com/";
 
+// 线上环境
+export const baseIMGUrl = "";
+
+
+
 
 export const baseUrl =
   // 线下的图片地址需要加上/api/

+ 1 - 0
src/base.css

@@ -3,6 +3,7 @@
   width: 100%;
   height: 100vh;
   max-width: 500px;
+  /* min-height: calc(100vh - 100px); */
   /* overflow: hidden; */
 }
 body {

+ 1 - 1
src/components/SearchInput/index.vue

@@ -38,7 +38,7 @@ watch(searchValue, () => {
   display: flex;
   justify-content: center;
   align-items: center;
-  height: 7vh;
+  height: 60px;
 
   .search-input {
     width: 80%;

+ 6 - 0
src/router/index.ts

@@ -118,6 +118,12 @@ const routes = [
     //使用import可以路由懒加载,如果不使用,太多组件一起加载会造成白屏
     component: () => import('@/views/VolunteerHome/apply.vue')
   },
+  {
+    path: '/all',
+    name: 'all',
+    //使用import可以路由懒加载,如果不使用,太多组件一起加载会造成白屏
+    component: () => import('@/views/all.vue')
+  },
 
   
 ]

+ 3 - 3
src/views/EnterNingguo/artwork.vue

@@ -20,8 +20,8 @@ export type artworkType = {
 }
 
 const searchParames = ref({
-  pageNum: 0,
-  pageSize: 0,
+  pageNum: 1,
+  pageSize: 9999,
   searchKey: ''
 } as {
   pageNum: number,
@@ -135,7 +135,7 @@ onBeforeMount(() => {
 
       img {
         width: 100%;
-        height: 21vh;
+        height: 180px;
         object-fit: cover;
         border-radius: 10px 10px 0 0;
       }

+ 2 - 2
src/views/EnterNingguo/dynamic.vue

@@ -11,8 +11,8 @@ const router = useRouter()
 const data = ref([] as DynamicType[])
 
 const searchParames = ref({
-  pageNum: 0,
-  pageSize: 0,
+  pageNum: 1,
+  pageSize: 9999,
   searchKey: '',
   dictId: null
 } as {

+ 102 - 73
src/views/ExhibitionService/BookingTime.vue

@@ -1,47 +1,43 @@
-<script setup lang='ts'>
-import { sceneBookingApi } from '@/api/api/sceneBooking';
-import router from '@/router';
-import { useStore } from '@/stores';
-import { showToast } from 'vant';
+<script setup lang="ts">
+import { sceneBookingApi } from '@/api/api/sceneBooking'
+import router from '@/router'
+import { useStore } from '@/stores'
+import { showToast } from 'vant'
 
 const dateArray = ref([] as any)
 const store = useStore()
 
 const getFutureDates = (numDays: number) => {
-  const datesArray = [];
-  const today = new Date();
-  const dateFormat = 'yyyy-MM-dd 星期X'; // 新增星期格式
+  const datesArray = []
+  const today = new Date()
+  const dateFormat = 'yyyy-MM-dd 星期X' // 新增星期格式
 
   for (let i = 0; i <= numDays; i++) {
-    const futureDate = new Date(today.getTime());
-    futureDate.setDate(today.getDate() + i);
-    const formattedDate = formatDate(futureDate, dateFormat);
+    const futureDate = new Date(today.getTime())
+    futureDate.setDate(today.getDate() + i)
+    const formattedDate = formatDate(futureDate, dateFormat)
     datesArray.push({
       date: formattedDate,
       isDisabled: false
-    });
+    })
   }
-  return datesArray;
+  return datesArray
 }
 
 const formatDate = (date: any, format: any) => {
-  const year = date.getFullYear();
-  const month = String(date.getMonth() + 1).padStart(2, '0');
-  const day = String(date.getDate()).padStart(2, '0');
-  const weekDay = getWeekDay(date);
-
-  return format.replace('yyyy', year)
-    .replace('MM', month)
-    .replace('dd', day)
-    .replace('X', weekDay);
+  const year = date.getFullYear()
+  const month = String(date.getMonth() + 1).padStart(2, '0')
+  const day = String(date.getDate()).padStart(2, '0')
+  const weekDay = getWeekDay(date)
+
+  return format.replace('yyyy', year).replace('MM', month).replace('dd', day).replace('X', weekDay)
 }
 
 const getWeekDay = (date: any) => {
-  const daysOfWeek = ['日', '一', '二', '三', '四', '五', '六'];
-  return daysOfWeek[date.getDay()];
+  const daysOfWeek = ['日', '一', '二', '三', '四', '五', '六']
+  return daysOfWeek[date.getDay()]
 }
 
-
 const selectDate = ref('' as string)
 const selectTime = ref('' as string)
 const selectId = ref('' as string)
@@ -51,12 +47,14 @@ const disableTimeList = ref([] as any)
 
 const noticeText = ref('' as any)
 
-
 // 获得可预约时间段
 const getBookingTime = async () => {
   const res: any = await sceneBookingApi.getBookingTimeAPI(selectDate.value.slice(0, 10))
   if (res.code == 0) {
-    bookingTimeList.value = res.data.time
+    bookingTimeList.value = res.data.time.map(v=>({
+      ...v,
+      lastTime:v.time.split('-')[1]
+    }))
     disableTimeList.value = res.data.stopDate
     noticeText.value = res.data.notice
 
@@ -71,23 +69,26 @@ watch(selectDate, () => {
   getBookingTime()
 })
 
-watch(disableTimeList, (newVal: any) => {
-  dateArray.value = dateArray.value.map((item: any) => {
-    return {
-      ...item,
-      isDisabled: disableTimeList.value.includes(item.date.slice(0, 10))
-    }
-  })
-  let today = selectDate.value.slice(0, 10)
-  if (newVal.includes(today)) {
-    const newDate = dateArray.value.find((item: any) => {
-      return item.isDisabled == false
+watch(
+  disableTimeList,
+  (newVal: any) => {
+    dateArray.value = dateArray.value.map((item: any) => {
+      return {
+        ...item,
+        isDisabled: disableTimeList.value.includes(item.date.slice(0, 10))
+      }
     })
-    selectDate.value = newDate.date
-    console.log(selectDate.value)
-  }
-
-}, { immediate: true })
+    let today = selectDate.value.slice(0, 10)
+    if (newVal.includes(today)) {
+      const newDate = dateArray.value.find((item: any) => {
+        return item.isDisabled == false
+      })
+      selectDate.value = newDate.date
+      console.log(selectDate.value)
+    }
+  },
+  { immediate: true }
+)
 
 const selectDateFu = (item: any) => {
   if (item.isDisabled) {
@@ -95,17 +96,17 @@ const selectDateFu = (item: any) => {
   } else {
     selectDate.value = item.date
     selectTime.value = ''
-    selectId.value=''
+    selectId.value = ''
   }
 }
 
 const selectTimeFu = (item: any) => {
   // router.go(0)
-  if (item.pcs === 0) {
+  if (item.pcs <= 0) {
     showToast('该时段预约已满,请选择其他时段进行预约')
   } else {
     selectTime.value = item.time
-    selectId.value=item.id
+    selectId.value = item.id
   }
 }
 
@@ -119,14 +120,13 @@ const goInpitInfo = async () => {
       store.selectDate = selectDate.value
       store.selectTime = selectTime.value
       store.selectId = selectId.value
-      router.push({ name: 'bookInputInfo' });
+      router.push({ name: 'bookInputInfo' })
     } else {
       router.go(0)
     }
   } else {
     showToast(res.msg)
   }
-
 }
 
 onMounted(() => {
@@ -138,38 +138,65 @@ onMounted(() => {
     selectDate.value = dateArray.value[0].date
   }
 })
+
+
+// 获取当前时间小时,比较时间
+const nowTime =(lastTime:string)=>{
+  let d = new Date();
+  let t =d.getHours()
+
+  let aa =Number(lastTime.split(':')[0])
+  return t<aa
+  
+}
 </script>
 
 <template>
-  <div class='time-box'>
+  <div class="time-box">
     <div class="date-select-box">
-      <div class="date-select-item" v-for="(item, index) in dateArray" :key="index"
-        :class="{ active: item.date === selectDate, disAble: item.isDisabled }" @click="selectDateFu(item)">
-        {{
-          item.date.slice(5) }}</div>
+      <div
+        class="date-select-item"
+        v-for="(item, index) in dateArray"
+        :key="index"
+        :class="{ active: item.date === selectDate, disAble: item.isDisabled }"
+        @click="selectDateFu(item)"
+      >
+        {{ item.date.slice(5) }}
+      </div>
     </div>
     <div class="time-select-box">
-      <div class="time-select-item" v-for="(item, index) in bookingTimeList" :key="index"
-        :class="{ active: item.time === selectTime }" :style="{ color: item.pcs == 0 ? '#9D4F0B' : '' }"
-        @click="() => { selectTimeFu(item) }">
+      <div
+        class="time-select-item"
+        v-for="(item, index) in bookingTimeList"
+        :key="index"
+        :class="{ active: item.time === selectTime,noAc:!nowTime(item.lastTime) }"
+        :style="{ color: item.pcs <= 0 ? '#9D4F0B' : '' }"
+        @click="
+          () => {
+            selectTimeFu(item)
+          }
+        "
+      >
         <div>{{ item.time }}</div>
-        <div>{{ item.pcs == 0 ? `预约已满` : `剩余${item.pcs}` }}</div>
+        <div>{{nowTime(item.lastTime)?item.pcs <= 0 ? `预约已满` : `剩余${item.pcs}`:'超过预约时间' }}</div>
       </div>
 
       <div class="notice-box" v-html="noticeText"></div>
     </div>
-    <div class="online-box" v-if="selectDate != '' && selectTime != ''" @click="goInpitInfo()">发起预约</div>
+    <div class="online-box" v-if="selectDate != '' && selectTime != ''" @click="goInpitInfo()">
+      发起预约
+    </div>
   </div>
 </template>
 
-<style lang='less' scoped>
+<style lang="less" scoped>
 .time-box {
   width: 100%;
   height: 100%;
   display: flex;
   justify-content: start;
   align-items: center;
-  background: #F1E9D4;
+  background: #f1e9d4;
   margin: 0;
   box-sizing: border-box;
   font-family: 'SourceHanSansCN-Regular';
@@ -177,31 +204,30 @@ onMounted(() => {
   position: relative;
   overflow: auto;
 
-
   .date-select-box {
     width: 35%;
     height: 100%;
     overflow: auto;
 
-
     .date-select-item {
       width: 100%;
       height: 80px;
       display: flex;
       justify-content: center;
       align-items: center;
-      color: #88866F;
+      color: #88866f;
       margin-bottom: 3px;
-      background: #F7F3E8;
+      background: #f7f3e8;
     }
 
     .active {
-      background: #E4DCC5;
+      background: #e4dcc5;
       color: #333333;
     }
 
+
     .disAble {
-      background: #E4DCC5;
+      background: #e4dcc5;
       color: rgba(51, 51, 51, 0.2);
     }
   }
@@ -216,9 +242,9 @@ onMounted(() => {
     .time-select-item {
       width: 100%;
       height: 50px;
-      background: #F7F3E8;
+      background: #f7f3e8;
       border-radius: 5px;
-      color: #88866F;
+      color: #88866f;
       display: flex;
       justify-content: space-between;
       align-items: center;
@@ -228,11 +254,14 @@ onMounted(() => {
     }
 
     .active {
-      background: #E4DCC5;
+      background: #e4dcc5;
       color: #333333;
     }
-
-    .notice-box{
+    .noAc{
+      opacity: .5;
+      pointer-events: none;
+    }
+    .notice-box {
       width: 100%;
       white-space: pre-wrap;
       color: #88866fad;
@@ -247,7 +276,7 @@ onMounted(() => {
   border-radius: 50px;
   background: url(@/assets/images/onlineBg.png);
   background-size: 100% 100%;
-  color: #F1E9D4;
+  color: #f1e9d4;
   position: fixed;
   left: 50%;
   transform: translateX(-50%);
@@ -259,4 +288,4 @@ onMounted(() => {
   font-weight: bold;
   z-index: 2;
 }
-</style>
+</style>

+ 2 - 2
src/views/ExhibitionService/activeBooking.vue

@@ -8,8 +8,8 @@ const active = ref(0)
 const router = useRouter()
 
 const searchParames = ref({
-  pageNum: 0,
-  pageSize: 0,
+  pageNum: 1,
+  pageSize: 9999,
   searchKey: '',
   dictId: null
 } as {

+ 15 - 6
src/views/ExhibitionService/bookInputInfo.vue

@@ -43,14 +43,21 @@ const submit = async() => {
   let flag1 =false
   let flag2 =false
   let flag3 =false
+  let flag4 =false
 
-  personList.value.forEach((v:any)=>{
+  const data =personList.value.map(v=>({
+    ...v,
+    name:v.name.trim()
+  }))
+
+  data.forEach((v:any)=>{
     
     if(v.bookDate) v.bookDate=v.bookDate.split(' ')[0]
 
     const {name,phone,num}=v
 
-    if(name.trim()==='') return  flag1=true 
+    if(name==='') return  flag1=true 
+    if(name.length>10 )  return  flag4=true 
 
     if(!/^1[3456789]\d{9}$/.test(phone)) return flag2=true
 
@@ -60,6 +67,7 @@ const submit = async() => {
   },[])
 
   if(flag1) return showToast('参观人姓名不能为空')
+  if(flag4) return showToast('参观人姓名不能超过10个字')
   if(flag2) return showToast('参观人电话格式错误')
   if(flag3) return showToast('身份证或社保卡格式错误')
   
@@ -81,11 +89,11 @@ const submit = async() => {
     <div class="input-card" v-for="(item, index) in personList" :key="index">
       <div class="top">
         <div>{{ '参观日期:' + item.bookDate.slice(0, 10) + ' ' + item.time }}</div>
-        <img @click="deleteFu(index)" src="@/assets/images/delect.png" alt="">
+        <img v-if="index!==0" @click="deleteFu(index)" src="@/assets/images/delect.png" alt="">
       </div>
       <div class="content">
         <div>
-          <div class="label">参观人姓名:</div><input type="text" v-model="item.name" placeholder="请输入内容,不超过6个字">
+          <div class="label">参观人姓名:</div><input type="text" v-model="item.name" placeholder="请输入内容,不超过10个字">
         </div>
         <div>
           <div class="label">参观人电话:</div><input type="text" v-model="item.phone" placeholder="请输入11个数字">
@@ -124,6 +132,7 @@ const submit = async() => {
   position: relative;
   max-width: 500px;
   overflow: auto;
+  padding-bottom: 120px;
 
 
   .input-card {
@@ -198,7 +207,7 @@ const submit = async() => {
 
     .add {
       width: 35%;
-      height: 5vh;
+      height: 42px;
       background: #FFFDF6;
       border: 1px solid #9D4F0B;
       border-radius: 50px;
@@ -207,7 +216,7 @@ const submit = async() => {
 
     .submit {
       width: 60%;
-      height: 5vh;
+      height: 42px;
       background: url(@/assets/images/onlineBg.png);
       background-size: 100% 100%;
       // border: 1px solid #9D4F0B;

+ 2 - 2
src/views/ExhibitionService/bookedList.vue

@@ -47,8 +47,8 @@ const loginOnNeed = async() => {
 }
 
 const searchParames = ref({
-  pageNum: 0,
-  pageSize: 0,
+  pageNum: 1,
+  pageSize: 9999,
   searchKey: ''
 } as {
   pageNum: number,

+ 3 - 3
src/views/SmartTour/exhibition.vue

@@ -27,8 +27,8 @@ const router = useRouter()
 const route = useRoute()
 
 const searchParames = ref({
-  pageNum: 0,
-  pageSize: 0,
+  pageNum: 1,
+  pageSize: 9999,
   searchKey: '',
   type: ''
 } as {
@@ -175,7 +175,7 @@ onBeforeMount(() => {
 
         img {
           width: 100%;
-          height: 25vh;
+          height: 210px;
           border-radius: 10px;
         }
 

+ 127 - 71
src/views/SmartTour/treasure-detail.vue

@@ -1,41 +1,40 @@
-<script setup lang='ts'>
-import playIcon from '@/assets/images/play.png';
-import pauseIcon from '@/assets/images/pause.png';
-import { showToast } from 'vant';
-import { TreasureApi } from '@/api/api/treasure';
+<script setup lang="ts">
+import playIcon from '@/assets/images/play.png'
+import pauseIcon from '@/assets/images/pause.png'
+import { showToast } from 'vant'
+import { TreasureApi } from '@/api/api/treasure'
 import { baseIMGUrl } from '@/api/request.ts'
 
-
+import { showImagePreview } from 'vant'
 
 // import { DynamicApi } from "@/api/api/dynamic/index";
 // import { showToast } from "vant";
 
 const route = useRoute()
 
-
 export type TreasureDetailType = {
-  age: string,
-  createTime: string,
-  creatorId: number,
-  creatorName: string,
-  description: string,
-  dirCode: string,
-  fileIds: string,
-  fileTypes: string,
-  id: number,
-  name: string,
-  publishDate: string,
-  size: string,
-  texture: string,
-  thumb: string,
-  type: string,
+  age: string
+  createTime: string
+  creatorId: number
+  creatorName: string
+  description: string
+  dirCode: string
+  fileIds: string
+  fileTypes: string
+  id: number
+  name: string
+  publishDate: string
+  size: string
+  texture: string
+  thumb: string
+  type: string
   updateTime: string
   files: {
-    images: string[],
-    moduleUrl: string,
-    audio: string,
+    images: string[]
+    moduleUrl: string
+    audio: string
     // 可能是单个可能是多个
-    videos: string[],
+    videos: string[]
   }
 }
 
@@ -44,7 +43,6 @@ const dynamicDetail = ref({} as TreasureDetailType)
 const audioPlaying = ref(null as any)
 const audioBgUrl = ref(null as any)
 
-
 // 当前显示什么状态的多媒体  module videos images
 const curState = ref(null as any)
 
@@ -91,7 +89,6 @@ const initShowState = () => {
     initVideos()
   }
   audioBgUrl.value = dynamicDetail.value.files.audio
-
 }
 
 const getDetailById = async () => {
@@ -104,7 +101,7 @@ const getDetailById = async () => {
       moduleUrl: '',
       audio: '',
       // 可能是单个可能是多个
-      videos: [],
+      videos: []
     }
 
     // 视频集合
@@ -113,7 +110,12 @@ const getDetailById = async () => {
     })
     // 图片集合
     dynamicDetail.value.files.images = res.data.file.filter((item: any) => {
-      return item.filePath.includes('.png') || item.filePath.includes('.jpg') || item.filePath.includes('.jpeg')
+      return (
+        item.filePath.includes('.png') ||
+        item.filePath.includes('.jpg') ||
+        item.filePath.includes('.jpeg') ||
+        item.filePath.includes('.gif')
+      )
     })
 
     //  音频链接
@@ -124,7 +126,7 @@ const getDetailById = async () => {
     //  模型链接
     dynamicDetail.value.files.moduleUrl = res.data.entity.modelLink
 
-    console.log('模型链接是',res.data.entity.modelLink,dynamicDetail.value.files.moduleUrl)
+    console.log('模型链接是', res.data.entity.modelLink, dynamicDetail.value.files.moduleUrl)
 
     initShowState()
 
@@ -138,58 +140,116 @@ getDetailById()
 </script>
 
 <template>
-  <div class='detail-box'>
-
+  <div class="detail-box">
     <div class="media-box" v-if="curState != null">
-      <img @click="() => { curMediaIndex-- }" v-show="curMediaIndex != 0 && curMediaList.length > 1" class="left-icon"
-        src="@/assets/images/left.png" alt="">
-      <img @click="() => { curMediaIndex++ }" v-show="curMediaIndex != curMediaList.length - 1"
-        class="left-icon right-icon" src="@/assets/images/right.png" alt="">
-      <img v-if="curState === 'images'" :src="baseIMGUrl + curMediaList[curMediaIndex].filePath" alt="">
-      <video v-if="curState === 'videos'" :src="baseIMGUrl + curMediaList[curMediaIndex].filePath" controls></video>
-      <iframe v-if="curState === 'module'" :src="dynamicDetail.files.moduleUrl" frameborder="0"></iframe>
+      <img
+        @click="
+          () => {
+            curMediaIndex--
+          }
+        "
+        v-show="curMediaIndex != 0 && curMediaList.length > 1"
+        class="left-icon"
+        src="@/assets/images/left.png"
+        alt=""
+      />
+      <img
+        @click="
+          () => {
+            curMediaIndex++
+          }
+        "
+        v-show="curMediaIndex != curMediaList.length - 1"
+        class="left-icon right-icon"
+        src="@/assets/images/right.png"
+        alt=""
+      />
+      <img
+        @click="
+          showImagePreview({
+            images: [baseIMGUrl + curMediaList[curMediaIndex].filePath],
+            showIndex: false
+          })
+        "
+        v-if="curState === 'images'"
+        :src="baseIMGUrl + curMediaList[curMediaIndex].filePath"
+        alt=""
+      />
+      <video
+        v-if="curState === 'videos'"
+        :src="baseIMGUrl + curMediaList[curMediaIndex].filePath"
+        controls
+      ></video>
+      <iframe
+        v-if="curState === 'module'"
+        :src="dynamicDetail.files.moduleUrl"
+        frameborder="0"
+      ></iframe>
 
       <div class="option-box">
-        <div v-if="dynamicDetail.files.moduleUrl" @click="initModule()" :class="{ active: curState === 'module' }">模型
+        <div
+          v-if="dynamicDetail.files.moduleUrl"
+          @click="initModule()"
+          :class="{ active: curState === 'module' }"
+        >
+          模型
         </div>
-        <div v-if="dynamicDetail.files.images.length != 0" @click="initImages()"
-          :class="{ active: curState === 'images' }">图片<span v-show="curState === 'images'">{{
+        <div
+          v-if="dynamicDetail.files.images.length != 0"
+          @click="initImages()"
+          :class="{ active: curState === 'images' }"
+        >
+          图片<span v-show="curState === 'images'">{{
             curMediaIndex + 1 + '/' + curMediaList.length
-          }}</span></div>
-        <div v-if="dynamicDetail.files.videos.length != 0" @click="initVideos()"
-          :class="{ active: curState === 'videos' }">视频<span v-show="curState === 'videos'">{{
+          }}</span>
+        </div>
+        <div
+          v-if="dynamicDetail.files.videos.length != 0"
+          @click="initVideos()"
+          :class="{ active: curState === 'videos' }"
+        >
+          视频<span v-show="curState === 'videos'">{{
             curMediaIndex + 1 + '/' + curMediaList.length
-          }}</span></div>
+          }}</span>
+        </div>
       </div>
     </div>
     <div class="info-box" :style="{ marginTop: curState != null ? '' : '0px' }">
       <div class="title">{{ dynamicDetail.name }}</div>
       <!-- <div class="age">{{ dynamicDetail.age + '·' + dynamicDetail.texture }}</div> -->
       <div class="age">
-        <div style="margin-right: 20px;">朝代:{{ dynamicDetail.age }}</div>
-        <div>质地:{{ dynamicDetail.texture }}</div>
-
+        <div style="margin-right: 20px" v-if="dynamicDetail.age">朝代:{{ dynamicDetail.age }}</div>
+        <div v-if="dynamicDetail.texture">质地:{{ dynamicDetail.texture }}</div>
       </div>
 
-      <div class="size">尺寸: {{ dynamicDetail.size }}</div>
-      <div class="info">{{ dynamicDetail.description }}</div>
+      <div class="size" v-if="dynamicDetail.size">尺寸: {{ dynamicDetail.size }}</div>
+      <div class="info" v-if="dynamicDetail.description">{{ dynamicDetail.description }}</div>
     </div>
 
-    <audio v-if="audioBgUrl" id="audioBg" :src="baseIMGUrl + audioBgUrl.filePath" style="display: none;"></audio>
-    <img v-if="audioBgUrl" class="playing-icon" :src="audioPlaying ? pauseIcon : playIcon" alt=""
-      @click="audioChange()">
+    <audio
+      v-if="audioBgUrl"
+      id="audioBg"
+      :src="baseIMGUrl + audioBgUrl.filePath"
+      style="display: none"
+    ></audio>
+    <img
+      v-if="audioBgUrl"
+      class="playing-icon"
+      :src="audioPlaying ? pauseIcon : playIcon"
+      alt=""
+      @click="audioChange()"
+    />
     <!-- <img class="back-icon" @click="() => { router.back() }" src="@/assets/images/back.png" alt=""> -->
   </div>
 </template>
 
-<style lang='less' scoped>
+<style lang="less" scoped>
 .detail-box {
   width: 100%;
   min-height: 100%;
-  background: #F7F3E8;
+  background: #f7f3e8;
   overflow: auto;
 
-
   .media-box {
     width: 100%;
     height: 35vh;
@@ -220,7 +280,6 @@ getDetailById()
       width: 100%;
       height: 100%;
       object-fit: cover;
-
     }
 
     iframe {
@@ -244,8 +303,8 @@ getDetailById()
         box-sizing: border-box;
         line-height: 25px;
         border-radius: 15px;
-        background: #9F8E8E;
-        color: #5B4848;
+        background: #9f8e8e;
+        color: #5b4848;
         font-size: 0.8em;
         margin: auto 2vw;
 
@@ -257,15 +316,14 @@ getDetailById()
       }
 
       .active {
-        background: #5B4848;
-        color: #F7F3E8;
+        background: #5b4848;
+        color: #f7f3e8;
       }
     }
-
   }
 
   .info-box {
-    background: #F7F3E8;
+    background: #f7f3e8;
     width: 100%;
     height: calc(65vh + 20px);
     margin-top: -20px;
@@ -287,7 +345,7 @@ getDetailById()
 
     .age {
       line-height: 1.5em;
-      color: #9D4F0B;
+      color: #9d4f0b;
       font-size: 1em;
       font-family: 'SourceHanSansCN-Regular';
       display: flex;
@@ -296,17 +354,15 @@ getDetailById()
 
     .size {
       line-height: 1.5em;
-      color: #9D4F0B;
+      color: #9d4f0b;
       font-size: 1em;
       font-family: 'SourceHanSansCN-Regular';
       margin-bottom: 10px;
     }
 
     .info {
-      color: #88866F;
+      color: #88866f;
     }
-
-
   }
 
   .playing-icon {
@@ -324,4 +380,4 @@ getDetailById()
   //   bottom: 10vh;
   // }
 }
-</style>
+</style>

+ 5 - 5
src/views/SmartTour/treasure.vue

@@ -42,8 +42,8 @@ export type TreasureType = {
 
 const searchParames = ref({
   dictId: null,
-  pageNum: 0,
-  pageSize: 0,
+  pageNum: 1,
+  pageSize: 9999,
   searchKey: '',
 } as {
   dictId: number | null,
@@ -132,9 +132,9 @@ onBeforeMount(() => {
             <div class="activity-card" v-for="(item, index) in data" :key="index" @click="goDetai(item.id)">
               <img v-show="item.thumb != ''" class="thumb" :src=" baseIMGUrl + item.thumb" alt="">
               <div class="title">{{ item.name }}</div>
-              <div class="detail">
-                <div style="margin-right: 30px;">朝代:{{ item.age }}</div>
-                <div>质地:{{ item.texture }}</div>
+              <div class="detail" v-if="item.age||item.texture">
+                <div style="margin-right: 30px;" v-if="item.age">朝代:{{ item.age }}</div>
+                <div v-if="item.texture">质地:{{ item.texture }}</div>
               </div>
 
             </div>

+ 3 - 2
src/views/VolunteerHome/home.vue

@@ -10,8 +10,8 @@ const router = useRouter()
 
 
 const searchParames = ref({
-  pageNum: 0,
-  pageSize: 0,
+  pageNum: 1,
+  pageSize: 9999,
   searchKey: '',
   type: ''
 } as {
@@ -142,6 +142,7 @@ onBeforeMount(() => {
   .tab-content {
     width: 100%;
     padding: 10px;
+    padding-bottom: 100px;
 
 
     .activity-card {

+ 56 - 0
src/views/all.vue

@@ -0,0 +1,56 @@
+<script setup lang='ts'>
+import router from '@/router';
+
+const arr =[
+  {
+    name:'宁国概览',
+    path:'/'
+  },
+  {
+    name:'宁博动态',
+    path:'/dynamic'
+  },
+  {
+    name:'宁博文创',
+    path:'/artwork'
+  },
+  {
+    name:'宁博藏珍',
+    path:'/treasure'
+  },
+  {
+    name:'宁博展览',
+    path:'/exhibition'
+  },
+  {
+    name:'展馆预约',
+    path:'/booking'
+  },
+  {
+    name:'宁博活动',
+    path:'/activeBooking'
+  },
+  {
+    name:'志愿者之家',
+    path:'/volunteerHome'
+  },
+]
+</script>
+
+<template>
+<div class='all'>
+  <div @click="router.push(item.path)" v-for="item in arr" :key="item.path">{{ item.name }}</div>
+</div>
+</template>
+
+<style lang='less' scoped>
+.all{
+  display: flex;
+  flex-wrap: wrap;
+  &>div{
+    padding: 20px;
+    margin-right: 20;
+    border: 1px solid #ccc;
+  }
+}
+</style>

+ 4 - 1
vite.config.ts

@@ -11,6 +11,9 @@ import { resolve } from 'path'
 // https://vitejs.dev/config/
 export default defineConfig({
   base: './',
+  server: {
+    host: '0.0.0.0'
+  },
   plugins: [
     vue(),
     Components({
@@ -21,7 +24,7 @@ export default defineConfig({
       imports: ['vue', 'vue-router'],
       //存放的位置
       dts: 'src/auto-import.d.ts',
-      resolvers: [ElementPlusResolver(),VantResolver()]
+      resolvers: [ElementPlusResolver(), VantResolver()]
     })
   ],
   resolve: {