|
@@ -0,0 +1,133 @@
|
|
|
|
+<template>
|
|
|
|
+ <view class="d-flex flex-col bg-base">
|
|
|
|
+ <view class="d-flex flex-col p-2">
|
|
|
|
+ <uni-search-bar
|
|
|
|
+ v-model="searchValue"
|
|
|
|
+ radius="100"
|
|
|
|
+ bgColor="#fff"
|
|
|
|
+ placeholder="搜索文物"
|
|
|
|
+ clearButton="auto"
|
|
|
|
+ cancelButton="none"
|
|
|
|
+ @confirm="doSearch"
|
|
|
|
+ />
|
|
|
|
+ </view>
|
|
|
|
+ <view class="d-flex flex-row justify-around p-2 pt-0">
|
|
|
|
+ <SimpleDropDownPicker v-model="selectedTag" :columns="categoryData.content.value" />
|
|
|
|
+ <SimpleDropDownPicker v-model="selectedLevel" :columns="levelData.content.value" />
|
|
|
|
+ <SimpleDropDownPicker v-model="selectedRegion" :columns="regionData.content.value" />
|
|
|
|
+ </view>
|
|
|
|
+ <view class="d-flex flex-row flex-wrap justify-between">
|
|
|
|
+ <map
|
|
|
|
+ id="map"
|
|
|
|
+ class="w-100 h-100vh"
|
|
|
|
+ :markers="listLoader.list.value || []"
|
|
|
|
+ :scale="15"
|
|
|
|
+ @markertap="onMarkerTap"
|
|
|
|
+ />
|
|
|
|
+ </view>
|
|
|
|
+ </view>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script setup lang="ts">
|
|
|
|
+import { onMounted, ref, watch } from 'vue';
|
|
|
|
+import CommonContent, { GetContentListParams } from '@/api/CommonContent';
|
|
|
|
+import { useSimplePageListLoader } from '@/common/composeabe/SimplePageListLoader';
|
|
|
|
+import { navTo } from '@/common/utils/PageAction';
|
|
|
|
+import UnmoveableContent from '@/api/inheritor/UnmoveableContent';
|
|
|
|
+import SimpleDropDownPicker from '@/common/components/SimpleDropDownPicker.vue';
|
|
|
|
+import { useSimpleDataLoader } from '@/common/composeabe/SimpleDataLoader';
|
|
|
|
+
|
|
|
|
+const mapCtx = uni.createMapContext('map');
|
|
|
|
+const categoryData = useSimpleDataLoader(async () =>
|
|
|
|
+ [{
|
|
|
|
+ id: 0,
|
|
|
|
+ name: '全部分类'
|
|
|
|
+ }].concat((await CommonContent.getCategoryList(3)).map((item) => ({
|
|
|
|
+ id: item.id,
|
|
|
|
+ name: item.title,
|
|
|
|
+ })))
|
|
|
|
+, true);
|
|
|
|
+const levelData = useSimpleDataLoader(async () =>
|
|
|
|
+ [{
|
|
|
|
+ id: 0,
|
|
|
|
+ name: '全部级别'
|
|
|
|
+ }].concat((await CommonContent.getCategoryList(2)).map((item) => ({
|
|
|
|
+ id: item.id,
|
|
|
|
+ name: item.title,
|
|
|
|
+ })))
|
|
|
|
+, true);
|
|
|
|
+const regionData = useSimpleDataLoader(async () =>
|
|
|
|
+ [{
|
|
|
|
+ id: 0,
|
|
|
|
+ name: '全部区域'
|
|
|
|
+ }].concat((await CommonContent.getCategoryList(1)).map((item) => ({
|
|
|
|
+ id: item.id,
|
|
|
|
+ name: item.title,
|
|
|
|
+ })))
|
|
|
|
+, true);
|
|
|
|
+const selectedTag = ref(0);
|
|
|
|
+const selectedLevel = ref(0);
|
|
|
|
+const selectedRegion = ref(0);
|
|
|
|
+const searchValue = ref('');
|
|
|
|
+const listLoader = useSimplePageListLoader(8, async (page, pageSize) => {
|
|
|
|
+ const res = (await UnmoveableContent.getContentList(new GetContentListParams().setSelfValues({
|
|
|
|
+ crType: selectedTag.value == 0 ? undefined: selectedTag.value,
|
|
|
|
+ level: selectedLevel.value == 0 ? undefined: selectedLevel.value,
|
|
|
|
+ region: selectedRegion.value == 0 ? undefined: selectedRegion.value,
|
|
|
|
+ keywords: searchValue.value,
|
|
|
|
+ }), page, pageSize)).list.map((p) => {
|
|
|
|
+ return {
|
|
|
|
+ ...p,
|
|
|
|
+ id: p.id,
|
|
|
|
+ longitude: Number(p.longitude),
|
|
|
|
+ latitude: Number(p.latitude),
|
|
|
|
+ iconPath: p.thumbnail,
|
|
|
|
+ width: 40,
|
|
|
|
+ height: 40,
|
|
|
|
+ callout: {
|
|
|
|
+ content: p.title,
|
|
|
|
+ color: "#ffffff",
|
|
|
|
+ fontSize: 15,
|
|
|
|
+ borderRadius: 15,
|
|
|
|
+ padding: "10",
|
|
|
|
+ bgColor: "#d9492e",
|
|
|
|
+ display: "ALWAYS",
|
|
|
|
+ },
|
|
|
|
+ }
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ mapCtx.includePoints({
|
|
|
|
+ points: res.map(p => ({
|
|
|
|
+ latitude: p.latitude,
|
|
|
|
+ longitude: p.longitude,
|
|
|
|
+ })),
|
|
|
|
+ padding: [20, 20, 20, 20],
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ return res;
|
|
|
|
+}, true);
|
|
|
|
+
|
|
|
|
+watch(selectedLevel, () => {
|
|
|
|
+ listLoader.loadData(undefined, true);
|
|
|
|
+});
|
|
|
|
+watch(selectedRegion, () => {
|
|
|
|
+ listLoader.loadData(undefined, true);
|
|
|
|
+});
|
|
|
|
+watch(selectedTag, () => {
|
|
|
|
+ listLoader.loadData(undefined, true);
|
|
|
|
+});
|
|
|
|
+
|
|
|
|
+onMounted(() => {
|
|
|
|
+ listLoader.loadData(undefined, true);
|
|
|
|
+})
|
|
|
|
+
|
|
|
|
+function doSearch() {
|
|
|
|
+ listLoader.loadData(undefined, true);
|
|
|
|
+}
|
|
|
|
+function onMarkerTap(e: { markerId: number }) {
|
|
|
|
+ goDetails(e.markerId);
|
|
|
|
+}
|
|
|
|
+function goDetails(id: number) {
|
|
|
|
+ navTo('/pages/inhert/artifact/details', { id })
|
|
|
|
+}
|
|
|
|
+</script>
|