liujie
2026-09-16 4f04c1b2e480f7ed30cb8e39de25d99b37023eec
update
43个文件已删除
4个文件已修改
170 ■■■■■ 已修改文件
frontend/src/components/AmapMeetingPointMap.vue 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
frontend/src/views/DashboardView.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
frontend/src/views/ScenicSpotDetailView.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/agreement.uq-gpyHN.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/auth.rPvAFwac.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/guide-dialog.YYCZhCqN.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/guide-nav-bar.DURQiwHZ.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/guide.DgFynr0i.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/index-BGjPDSu0.css 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/index-CB-dYXaU.js 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/map.HiBe-Jxg.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/message.Ci4xuAxh.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/order.BmLDmrFi.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-agreement-detail-index.DKDLVPJs.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-agreements-index.CuDTxnu5.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-bank-branch-select-index.Ba84tMs-.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-bank-card-add-index.DHefaQGv.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-bank-card-select-index.DrAHi-sS.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-certification-index.lCA2vuJb.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-change-phone-new-index.nh6V9Qbh.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-change-phone-old-index.DsPKbzre.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-earnings-index.DWJKv2-s.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-feedback-index.Dn8PoeLl.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-login-index.BZ8Nq4To.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-meeting-point-index.DtVMWHDz.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-messages-index.CYTdNKMN.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-onboarding-index.Ce_4bdLz.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-onboarding-pending-index.Csga8LDe.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-order-detail-index.Cwe3AjBj.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-orders-index.DO6cl73G.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-profile-index.CfBBDqqV.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-rating-index.FeOXpBvc.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-receiving-index.Lwuxg9dm.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-register-phone-index.Cvx4X_NB.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-register-profile-index.CFycFLft.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-settings-index.BUj-nz2k.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-withdrawal-detail-index.DRupYpeD.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-withdrawal-index.BTTsc8Iq.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-withdrawal-success-index.w9ITMzv_.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-workbench-index.BgjV0zqX.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/registration.DBnhvHXj.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/router.-TgekwYg.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/settlement.DQ63Qm9-.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/system.Y4QQUfyu.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/uni-app.es.DW1hfPog.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/assets/withdrawal.-Cw4wMCb.js 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
mingdaojingjiang_guide_app/dist/build/h5/index.html 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
frontend/src/components/AmapMeetingPointMap.vue
@@ -9,6 +9,9 @@
  activeIndex: { type: Number, default: null },
  cityName: { type: String, default: '' },
  showSearch: { type: Boolean, default: true },
  directPlacement: { type: Boolean, default: false },
  address: { type: String, default: '' },
  searchLabel: { type: String, default: '' },
  compact: { type: Boolean, default: false },
})
const emit = defineEmits(['place', 'address-resolved'])
@@ -29,9 +32,16 @@
let hasFittedPoints = false
let suggestTimer
let suggestionRequestId = 0
let placementRequestId = 0
let skipNextSuggestion = false
let preferResolvedAddress = false
let lastSyncedAddress = ''
const isMarking = computed(() => Number.isInteger(props.activeIndex))
const placementIndex = computed(() => {
  if (Number.isInteger(props.activeIndex)) return props.activeIndex
  return props.directPlacement && props.points.length ? 0 : null
})
const isMarking = computed(() => Number.isInteger(placementIndex.value))
const hasPosition = (point) => (
  point?.longitude != null
  && point?.latitude != null
@@ -51,7 +61,7 @@
    if (!hasPosition(point)) return []
    const content = document.createElement('button')
    content.type = 'button'
    content.className = `amap-meeting-marker${props.activeIndex === index ? ' is-active' : ''}`
    content.className = `amap-meeting-marker${placementIndex.value === index ? ' is-active' : ''}`
    const markerLabel = document.createElement('span')
    markerLabel.textContent = String(index + 1)
    content.appendChild(markerLabel)
@@ -61,7 +71,7 @@
      anchor: 'bottom-center',
      content,
      title: content.title,
      zIndex: props.activeIndex === index ? 120 : 100,
      zIndex: placementIndex.value === index ? 120 : 100,
    })
    marker.on('click', () => map.setZoomAndCenter(17, marker.getPosition()))
    return [marker]
@@ -76,7 +86,7 @@
}
const focusCurrentPoint = () => {
  const point = props.points[props.activeIndex]
  const point = props.points[placementIndex.value]
  if (map && hasPosition(point)) {
    map.setZoomAndCenter(Math.max(map.getZoom(), 17), [Number(point.longitude), Number(point.latitude)])
  }
@@ -110,20 +120,29 @@
  }
}
const handleMapClick = async (event) => {
const placeAtCoordinates = async (coordinates, fallbackAddress = '') => {
  if (!isMarking.value) {
    ElMessage.info('请先选择需要标注的汇合点')
    return
  }
  const index = placementIndex.value
  const requestId = ++placementRequestId
  const address = await resolveAddress(coordinates)
  if (requestId !== placementRequestId) return
  preferResolvedAddress = true
  emit('place', {
    index,
    ...coordinates,
    address: address || fallbackAddress,
  })
}
const handleMapClick = (event) => {
  const coordinates = {
    longitude: Number(event.lnglat.getLng().toFixed(6)),
    latitude: Number(event.lnglat.getLat().toFixed(6)),
  }
  emit('place', {
    index: props.activeIndex,
    ...coordinates,
    address: await resolveAddress(coordinates),
  })
  placeAtCoordinates(coordinates)
}
const getLocationCoordinates = (location) => {
@@ -204,21 +223,30 @@
    return
  }
  map.setZoomAndCenter(17, [coordinates.longitude, coordinates.latitude])
  if (!isMarking.value) {
    ElMessage.info('请先点击“标注汇合点”选择需要设置的汇合点')
    return
  }
  emit('place', {
    index: props.activeIndex,
    ...coordinates,
    address: await resolveAddress(coordinates),
  })
  await placeAtCoordinates(
    coordinates,
    [poi.district, poi.address, poi.name].filter(Boolean).join(' · '),
  )
}
const clearSearch = () => {
  suggestionRequestId += 1
  window.clearTimeout(suggestTimer)
  searchResults.value = []
}
const syncKeywordAddress = (address) => {
  const value = typeof address === 'string' ? address.trim() : ''
  if (!value) {
    lastSyncedAddress = ''
    return
  }
  if (preferResolvedAddress || !keyword.value.trim() || keyword.value === lastSyncedAddress) {
    skipNextSuggestion = true
    keyword.value = value
    preferResolvedAddress = false
  }
  lastSyncedAddress = value
}
onMounted(async () => {
@@ -257,11 +285,13 @@
  updateSearchCity()
  moveToCity()
})
watch(() => props.address, syncKeywordAddress, { immediate: true })
watch(keyword, loadSuggestions)
onBeforeUnmount(() => {
  window.clearTimeout(suggestTimer)
  suggestionRequestId += 1
  placementRequestId += 1
  clearMarkers()
  map?.destroy()
  map = null
@@ -270,11 +300,12 @@
<template>
  <div class="amap-picker" :class="{ compact }">
    <div v-if="showSearch" class="map-search">
    <div v-if="showSearch" class="map-search" :class="{ 'has-label': searchLabel }">
      <span v-if="searchLabel" class="map-search-label">{{ searchLabel }}</span>
      <el-input
        v-model="keyword"
        clearable
        placeholder="搜索景区、地址或地标"
        placeholder="搜索景区、地址或地标,选择后自动定位"
        @keyup.enter="searchLocation"
        @clear="clearSearch"
      />
@@ -289,7 +320,7 @@
    <div v-loading="loading" class="map-shell" :class="{ marking: isMarking }">
      <div ref="mapContainer" class="map-container" />
      <div v-if="loadError" class="map-error">{{ loadError }}</div>
      <span v-else-if="isMarking" class="marking-tip">点击地图设置“{{ points[activeIndex]?.pointName }}”</span>
      <span v-else-if="isMarking" class="marking-tip">点击地图设置“{{ points[placementIndex]?.pointName }}”</span>
    </div>
  </div>
</template>
@@ -297,8 +328,13 @@
<style scoped>
.amap-picker { width: min(100%, 900px); }
.amap-picker.compact { width: 100%; }
.map-search { position: relative; z-index: 10; display: grid; grid-template-columns: minmax(280px, 440px) auto; gap: 10px; width: fit-content; margin-bottom: 12px; }
.map-search { position: relative; z-index: 10; display: grid; grid-template-columns: minmax(280px, 440px) auto; gap: 10px; align-items: center; width: fit-content; margin-bottom: 12px; }
.compact .map-search { width: 100%; grid-template-columns: minmax(0, 1fr) 72px; }
.map-search.has-label { width: 100%; grid-template-columns: 92px minmax(0, 1fr) 72px; }
.map-search-label { color: #475467; font-size: 14px; font-weight: 500; white-space: nowrap; }
.search-results { position: absolute; top: 40px; left: 0; width: 440px; max-height: 280px; overflow-y: auto; background: white; border: 1px solid #d0d5dd; box-shadow: 0 8px 24px rgba(16, 24, 40, .14); }
.compact .search-results { width: calc(100% - 82px); }
.map-search.has-label .search-results { left: 102px; width: calc(100% - 184px); }
.search-results button { display: flex; flex-direction: column; gap: 3px; width: 100%; padding: 10px 12px; color: #344054; text-align: left; background: white; border: 0; border-bottom: 1px solid #eaecf0; cursor: pointer; }
.search-results button:hover { background: #f2f4f7; }
.search-results strong { font-size: 13px; }
frontend/src/views/DashboardView.vue
@@ -222,8 +222,8 @@
.chart-heading div { display: flex; align-items: center; gap: 8px; }
.chart-heading strong, .section-heading h2, .quick-panel h2 { margin: 0; color: #232932; font-size: 14px; }
.chart-heading span { color: #8491a3; font-size: 11px; }
.line-chart { height: 245px; }
.line-chart svg { width: 100%; height: 100%; overflow: visible; }
.line-chart { height: 190px; }
.line-chart svg { display: block; width: 100%; height: 100%; overflow: visible; }
.grid-line { stroke: #e8eef5; stroke-width: 1; stroke-dasharray: 3 3; }
.axis-label { fill: #8491a3; font-size: 10px; }
.quick-panel { min-height: 300px; padding: 18px 16px; }
frontend/src/views/ScenicSpotDetailView.vue
@@ -87,7 +87,7 @@
}
const startMarking = (index) => {
  markingIndex.value = index
  ElMessage.info('请在下方地图点击需要标注的位置')
  ElMessage.info('可搜索地点,或直接点击地图设置汇合点')
}
const markPoint = ({ index, longitude, latitude, address }) => {
  if (markingIndex.value !== index || !form.meetingPoints[index]) return
@@ -102,6 +102,7 @@
  }
}
const placeMeetingPoint = (index, { longitude, latitude, address }) => {
  markingIndex.value = index
  markPoint({ index, longitude, latitude, address })
}
const syncMeetingPointAddress = (index, { address }) => {
@@ -234,17 +235,16 @@
              标注汇合点
            </el-button>
          </div>
          <div class="meeting-address-row">
            <span class="meeting-label">定位地址</span>
            <el-input :model-value="point.address" disabled placeholder="标注后自动获取地图具体地址" />
          </div>
          <div class="meeting-map-row">
            <AmapMeetingPointMap
              class="meeting-map"
              :points="[point]"
              :active-index="markingIndex === index ? 0 : null"
              :city-name="selectedCityName"
              :show-search="false"
              search-label="定位地址"
              :address="point.address"
              show-search
              direct-placement
              compact
              @place="placeMeetingPoint(index, $event)"
              @address-resolved="syncMeetingPointAddress(index, $event)"
@@ -304,8 +304,6 @@
.meeting-label { color: #475467; font-size: 14px; font-weight: 500; }
.meeting-toolbar :deep(.el-input__wrapper) { background: #f5f7fa; box-shadow: none; }
.meeting-toolbar :deep(.el-button) { width: 120px; margin: 0; }
.meeting-address-row { display: grid; grid-template-columns: 92px minmax(0, 397px); align-items: center; gap: 14px; margin-top: 14px; }
.meeting-address-row :deep(.el-input__wrapper) { background: #eef1f5; box-shadow: none; }
.meeting-map-row { display: grid; grid-template-columns: minmax(0, 504px) 88px; align-items: end; gap: 18px; margin-top: 24px; }
.meeting-map { min-width: 0; }
.meeting-delete-button { width: 88px; margin: 0; }
@@ -322,7 +320,6 @@
@media (max-width: 760px) {
  .meeting-toolbar { grid-template-columns: 82px minmax(0, 1fr); }
  .meeting-toolbar :deep(.el-button) { grid-column: 2; }
  .meeting-address-row { grid-template-columns: 82px minmax(0, 1fr); }
  .meeting-map-row { grid-template-columns: minmax(0, 1fr) 88px; }
}
</style>
mingdaojingjiang_guide_app/dist/build/h5/assets/agreement.uq-gpyHN.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/auth.rPvAFwac.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/guide-dialog.YYCZhCqN.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/guide-nav-bar.DURQiwHZ.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/guide.DgFynr0i.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/index-BGjPDSu0.css
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/index-CB-dYXaU.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/map.HiBe-Jxg.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/message.Ci4xuAxh.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/order.BmLDmrFi.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-agreement-detail-index.DKDLVPJs.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-agreements-index.CuDTxnu5.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-bank-branch-select-index.Ba84tMs-.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-bank-card-add-index.DHefaQGv.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-bank-card-select-index.DrAHi-sS.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-certification-index.lCA2vuJb.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-change-phone-new-index.nh6V9Qbh.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-change-phone-old-index.DsPKbzre.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-earnings-index.DWJKv2-s.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-feedback-index.Dn8PoeLl.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-login-index.BZ8Nq4To.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-meeting-point-index.DtVMWHDz.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-messages-index.CYTdNKMN.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-onboarding-index.Ce_4bdLz.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-onboarding-pending-index.Csga8LDe.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-order-detail-index.Cwe3AjBj.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-orders-index.DO6cl73G.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-profile-index.CfBBDqqV.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-rating-index.FeOXpBvc.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-receiving-index.Lwuxg9dm.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-register-phone-index.Cvx4X_NB.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-register-profile-index.CFycFLft.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-settings-index.BUj-nz2k.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-withdrawal-detail-index.DRupYpeD.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-withdrawal-index.BTTsc8Iq.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-withdrawal-success-index.w9ITMzv_.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/pages-workbench-index.BgjV0zqX.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/registration.DBnhvHXj.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/router.-TgekwYg.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/settlement.DQ63Qm9-.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/system.Y4QQUfyu.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/uni-app.es.DW1hfPog.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/assets/withdrawal.-Cw4wMCb.js
File was deleted
mingdaojingjiang_guide_app/dist/build/h5/index.html
@@ -14,7 +14,7 @@
    <title>com.mingdao.guide</title>
    <!--preload-links-->
    <!--app-context-->
    <script type="module" crossorigin src="/assets/index-CB-dYXaU.js"></script>
    <script type="module" crossorigin src="/assets/index-Bu3F9tAw.js"></script>
    <link rel="stylesheet" crossorigin href="/assets/index-C1LkI29h.css">
  </head>
  <body>