index.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. <template>
  2. <!-- <div class="head">
  3. <v-lazy-image
  4. src="https://photoprism.hichinatravel.com/api/v1/t/2bfc32550ae040956f7e861566d26c487c0143e7/32mcf2k4/fit_2048"
  5. alt=""
  6. />
  7. <div class="point-list">
  8. 此处由于xiaopiu问题,补上一个空的div
  9. </div>
  10. </div> -->
  11. <p class="title mt-52">Seasonal Recommendation</p>
  12. <div
  13. style="
  14. font-family: arial;
  15. font-size: 24px;
  16. margin: 25px;
  17. "
  18. >
  19. <div style="margin-top: 10px;margin: 0 auto; width: 50%;">
  20. <el-input
  21. v-model="query"
  22. placeholder="Search by title"
  23. @input="search"
  24. />
  25. </div>
  26. </div>
  27. <div class="list mt-24">
  28. <div class="wrapper flex-start">
  29. <destination-card
  30. class="hover-item"
  31. :destinationSummary="item"
  32. v-for="(item, index) in globalDestinationCards"
  33. v-bind:key="index"
  34. :class="{ 'no-mar': (index + 1) % 4 === 0 }"
  35. />
  36. </div>
  37. </div>
  38. <!-- <div style="width: 100%;">
  39. <el-button type="primary" plain class="get-more mt-100" @click="loadMore" style="cursor: pointer;">Click to load more</el-button>
  40. </div> -->
  41. <!-- <div class="wrapper">
  42. <p class="text mt-26">Province and city list</p>
  43. <ul class="area-list mt-26">
  44. <li>
  45. Municipality·直辖市Shanghai·上海 Beijing·北京 Tianjin·天津
  46. Chongqing·重庆 Special Adaministration Region·特别行政区Hong Kong·香港
  47. Macau·澳门Hainan·
  48. </li>
  49. <li>海南</li>
  50. <li>
  51. Sanya·三亚 Haikou·海口 Wenchang·文昌 Sansha·三沙市 Wuzhishan·五指山市
  52. Wanning·万宁 Baoting·保亭 Danzhou·儋州 Lingshui·陵水黎族自治县Yunnan·
  53. </li>
  54. <li>云南</li>
  55. <li>
  56. Lijiang·丽江 Dali·大理 Kunming·昆明 Shangri-La·香格里拉 Xiānggélǐlā
  57. Xishuangbanna·西双版纳 Qujing·曲靖 Wenshan·文山壮族苗族自治州
  58. Honghe·红河哈尼族彝族自治州 Chuxiong·楚雄彝族自治州
  59. Puer·普洱Tibet·西藏Lhasa·拉萨 Nyingchi·林芝 Lín Zhī Shigatse·日喀则 Rì
  60. Kā Zé Mainling·米林 Ngari·阿里Shandong·
  61. </li>
  62. <li>山东</li>
  63. <li>
  64. Qingdao·青岛 Jinan·济南 Jǐ Nán Penglai·蓬莱 Taian·泰安 Yantai·烟台
  65. Weifang·潍坊 Weihai·威海 Binzhou·滨州 Dezhou·德州 Dongying·东营
  66. Heze·菏泽 Jining·济宁 Liaocheng·聊城 Linyi·临沂 Rizhao·日照
  67. Zaozhuang·枣庄 Zibo·淄博Zhejiang·
  68. </li>
  69. <li>浙江</li>
  70. <li>
  71. Hangzhou·杭州 Wenzhou·温州 Shaoxing·绍兴 Ningbo·宁波 Jiaxing·嘉兴
  72. Zhoushan·舟山 Jinhua·金华 Huzhou·湖州 Lishui·丽水 Taizhou·台州
  73. </li>
  74. <li>Fujian·福建</li>
  75. <li>
  76. Xiamen·厦门 Quanzhou·泉州 Fuzhou·福州 Zhangzhou·漳州 Ningde·宁德
  77. Wuyishan·武夷山 Longyan·龙岩 Nanping·南平 Putian·莆田 Sanming·三明
  78. </li>
  79. <li>Shaanxi·陕西</li>
  80. <li>
  81. Xi'an·Xi'an 西安 Huayin·华阴 Xianyang·咸阳 Hanzhong·汉中 Hànzhōng
  82. Yanan·Yan'an 延安 Ankang·安康 Lvliang·吕梁 Yulin·榆林 Baoji·宝鸡
  83. </li>
  84. <li>Shanxi·山西</li>
  85. <li>
  86. Datong·大同 Jinzhong·晋中 Xinzhou·忻州 Taiyuan·太原 Changzhi·长治
  87. Jincheng·晋城 Shuozhou·朔州 Yangquan·阳泉
  88. </li>
  89. <li>Hunan·湖南</li>
  90. <li>
  91. Changsha·长沙 Zhangjiajie·张家界 Chenzhou·郴州
  92. Xiangxi·湘西土家族苗族自治州 Changde·常德 Hengyang·衡阳 Shaoyang·邵阳
  93. Xingtan·湘潭 Yiyang·益阳 Yueyang·岳阳 Zhuzhou·株洲
  94. </li>
  95. <li>Hubei·湖北</li>
  96. <li>
  97. Wuhan·武汉 Shennongjia Forestry District·神农架 Enshi Tujia and Miao
  98. Autonomous Prefecture·恩施 Xiangyang·襄阳 Shiyan·十堰 Yichang·宜昌
  99. Ezhou·鄂州 Huangshi·黄石 Jingzhou·荆州 Suizhou·随州 Xianning·咸宁
  100. </li>
  101. <li>Guangdong·广东</li>
  102. <li>
  103. Guangzhou·广州 Shenzhen·深圳 Shaoguan·韶关 Foshan·佛山 Dongguan·东莞
  104. Zhuhai·珠海 Shantou·汕头 Huizhou·惠州 Chaozhou·潮州 Qingyuan·清远
  105. Heyuan·河源 Jiangmen·江门 Jieyang·揭阳 Maoming·茂名 Meihzou·梅州
  106. Yangjiang·阳江 Yunfu·云浮 Zhanjiang·湛江 Zhaoqing·肇庆
  107. </li>
  108. <li>Guangxi·广西</li>
  109. <li>
  110. Beihai·北海 Guilin·桂林 Nanning·南宁 Chongzuo·崇左 Laibin·来宾
  111. Liuzhou·柳州
  112. </li>
  113. <li>Anhui·安徽</li>
  114. <li>
  115. Huangshan·黄山 Hefei·合肥 Xuancheng·宣城 Chizhou·池州 Anqing·安庆
  116. Tongling·铜陵 Bengbu·蚌埠 Bozhou·亳州 Chuzhou·滁州 Fuyang·阜阳
  117. Huaibei·淮北 Huainan·淮南 Wuhu·芜湖 Lian·六安
  118. </li>
  119. <li>Jiangxi·江西</li>
  120. <li>
  121. Yingtan·鹰潭 Jingdezhen Porcelain·景德镇 Shangrao·上饶 Lushan·庐山市
  122. Jiujiang·九江 Nanchang·南昌 Pingxiang·萍乡 Xinyu·新余 Yichun·宜春
  123. </li>
  124. <li>Jiangsu·江苏</li>
  125. <li>
  126. Nanjing·南京 Suzhou·苏州 Wuxi·无锡 Yangzhou·扬州 Xuzhou·徐州
  127. Kunshan·昆山 Yixing·宜兴 Shaoxing·绍兴 Taizhou·泰州 changzhou·常州
  128. Huaian·淮安 Lianyungang·连云港 Nantong·南通 Suqian·宿迁 Yancheng·盐城
  129. </li>
  130. <li>Henan·河南</li>
  131. <li>
  132. Luoyang·洛阳 Anyang·安阳 Zhengzhou·郑州 Kaifeng·开封 Jiaozuo·焦作
  133. Dengfeng·登封 Zhoukou·周口 Luohe·漯河 Nanyang·南阳 Puyang·濮阳
  134. Sanmenxia·三门峡 Shangqiu·商丘 Xinxiang·新乡 Xuchang·许昌
  135. </li>
  136. <li>Hebei·河北</li>
  137. <li>
  138. Chengde·承德 Baoding·保定 Qinhuangdao·秦皇岛 Zhangjiakou·张家口
  139. Handan·邯郸 Zunhua·遵化 Langfang·廊坊 Cangzhou·沧州 Hengshui·衡水
  140. Shijiazhuang·石家庄 Tangshan·唐山 Xingtai·邢台
  141. </li>
  142. <li>Xinjiang·新疆</li>
  143. <li>
  144. Ürümqi·乌鲁木齐 Wūlǔmùqí Ili Kazakh Autonomous Prefecture·伊犁 Yīlí
  145. Turpan·吐鲁番 Tǔlǔfān Bayingolin Mongol Autonomous Prefecture·巴音郭楞
  146. Bā Yīn Guō Léng Kashgar Prefecture·喀什 Altay·阿勒泰地区 Aksu·阿克苏
  147. Changji Hui·昌吉回民自治州 Hami·哈密 Karamay·克拉玛依 Kuitun·奎屯
  148. Shihezi·石河子 Yining·伊宁
  149. </li>
  150. <li>Heilongjiang·黑龙江</li>
  151. <li>
  152. Harbin·哈尔滨 Hā'ěrbīn Mudanjiang· Daxing'anling Prefecture·大兴安岭
  153. Dàxīng'ānlǐng Mohe·漠河 Heihe·黑河 Daqing·大庆 Jiamusi·佳木斯
  154. Qiqihar·齐齐哈尔
  155. </li>
  156. <li>Jilin·吉林</li>
  157. <li>
  158. Changchun·长春 Yanbian Korean Prefecture·延边 Baishan·白山 Tonghua·通化
  159. Liaoyuan·辽源
  160. </li>
  161. <li>Liaoning·辽宁</li>
  162. <li>
  163. Dalian·大连 Shenyang·沈阳 Dandong·丹东 Anshan·鞍山 Chaoyang·朝阳
  164. Huludao·葫芦岛 Panjin·盘锦 Yingkou·营口 Jinzhou·锦州
  165. </li>
  166. <li>Qinghai·青海</li>
  167. <li>
  168. Xining·西宁 Golmud·格尔木 Gé'ěrmù Tibetan Autonomous Prefecture of
  169. Hainan·海南藏族自治州
  170. </li>
  171. <li>Inner Mongolia·内蒙古</li>
  172. <li>
  173. Hulunbuir·呼伦贝尔 Hūlúnbèi'ěr Alxa League·阿拉善 Ā Lā Shàn
  174. Hohhot·呼和浩特 Hūhéhàotè Ordos·鄂尔多斯 È'ěrduōsī Arxan·阿尔山
  175. Baynnur·巴彦淖尔 Baotou·包头 Bortala·博尔塔拉蒙古自治州 Chifeng·赤峰
  176. Wulanchabu·乌兰察布 Tongliao·通辽 Wuhai·乌海
  177. </li>
  178. <li>Gansu·甘肃</li>
  179. <li>
  180. Lanzhou·兰州 Dunhuang·敦煌 Jiayuguan·嘉峪关 Jiāyù Guān Zhangye·张掖
  181. Gannan Tibetan Autonomous Prefecture·甘南 Baiyin·白银 Baoji·宝鸡
  182. Dingxi·定西 Jiuquan·酒泉 Linxia Hui·临夏回族自治州 Pingliang·平凉
  183. Qingyang·庆阳 Tianshui·天水 Wuwei·武威
  184. </li>
  185. <li>Ningxia·宁夏</li>
  186. <li>
  187. Yinchuan·银川 Guyuan·固原 Wuzhong·吴忠 Zhongwei·中卫 Shizuishan·石嘴山
  188. </li>
  189. <li>Taiwan·台湾</li>
  190. <li>
  191. Taipei·台北 Taichung·台中 Kaohsiung·高雄 Gāoxióng Shì Hualien·花莲
  192. Huālián Pingtung·屏东 Yilan·宜兰 Taitung·台东 Nantou·南投 Chiayi·嘉义
  193. Xinzhu·新竹 Tainan·台南 Taoyuan·桃园
  194. </li>
  195. <li>Sichuan·四川</li>
  196. <li>
  197. Chengdu·成都 Ya'an·雅安 Yǎ'ān Leshan·乐山 Garzê Tibetan Autonomous
  198. Prefecture·甘孜 Gān Zī Ngawa·阿坝藏族羌族自治州 Deyang·德阳
  199. Guangyuan·广元 Nanchong·南充 Liangshan·凉山彝族自治州 Mianyang·绵阳
  200. Neijiang·内江 Panzhihua·攀枝花 Suining·遂宁 Yibin·宜宾 Zigong·自贡
  201. </li>
  202. <li>Guizhou·贵州</li>
  203. <li>
  204. Guiyang·贵阳 Southeast Guizhou·黔东南 Qián Dōng Nán Anshun·安顺
  205. Bijie·毕节 Qiannan·黔南布依族苗族自治州 Qianxinan·黔西南布依族苗族自治州
  206. Zunyi·遵义
  207. </li>
  208. </ul>
  209. </div> -->
  210. </template>
  211. <script setup>
  212. import VLazyImage from "v-lazy-image";
  213. import { AXIOS } from "@/common/http-commons";
  214. import DestinationCard from "../../components/DestinationCard";
  215. import { debounce } from 'lodash';
  216. const pageSize = ref(45);
  217. const currentPage = ref(1);
  218. const destinationCards = ref([]);
  219. const globalDestinationCards = ref([]);
  220. const query = ref("");
  221. function loadMore(){
  222. currentPage.value += 1
  223. loadDestinations()
  224. }
  225. function getNextBatch() {
  226. window.onscroll = debounce(function() {
  227. let bottomOfWindow = document.documentElement.scrollTop + window.innerHeight + 100 > document.documentElement.scrollHeight;
  228. if(bottomOfWindow){
  229. loadMore()
  230. }
  231. }, 500)
  232. }
  233. // function debounce(cb, delay) {
  234. // let timer;
  235. // return function (...args) {
  236. // if (timer) {
  237. // clearTimeout(timer);
  238. // }
  239. // timer = setTimeout(() => {
  240. // cb.call(this, ...args);
  241. // }, delay);
  242. // };
  243. // }
  244. const search = debounce((value) => {
  245. globalDestinationCards.value = []
  246. currentPage.value = 1;
  247. loadDestinations();
  248. }, 500);
  249. function loadDestinations() {
  250. destinationCards.value = [];
  251. var params = {};
  252. params.pageSize = pageSize.value;
  253. console.log("loading page: "+ currentPage.value)
  254. params.page = currentPage.value;
  255. (params.query = query.value),
  256. AXIOS.get("/api/public/destination/list", { params: params })
  257. .then(function (response) {
  258. destinationCards.value = response.data.data.data;
  259. globalDestinationCards.value = globalDestinationCards.value.concat(destinationCards.value)
  260. })
  261. .catch(function (error) {
  262. console.log(error);
  263. });
  264. }
  265. onMounted(() => {
  266. loadDestinations();
  267. getNextBatch();
  268. });
  269. </script>
  270. <style scoped lang="scss">
  271. .head {
  272. position: relative;
  273. height: 817px;
  274. img {
  275. width: 100%;
  276. height: 100%;
  277. }
  278. .point-list {
  279. position: absolute;
  280. width: 528px;
  281. height: 601px;
  282. right: 24px;
  283. top: 57px;
  284. background: white;
  285. font-size: 20px;
  286. border-radius: 16px;
  287. z-index: 999;
  288. overflow-y: scroll;
  289. &::-webkit-scrollbar {
  290. display: none;
  291. }
  292. }
  293. }
  294. .title {
  295. color: rgba(42, 130, 228, 1);
  296. font-size: 32px;
  297. text-align: center;
  298. }
  299. .list {
  300. padding-top: 28px;
  301. background: #f3f3f3;
  302. }
  303. .wrapper {
  304. flex-wrap: wrap;
  305. }
  306. .hover-item {
  307. width: 295px;
  308. height: 192px;
  309. margin-right: 70px;
  310. margin-bottom: 39px;
  311. }
  312. .text {
  313. color: rgba(80, 80, 80, 1);
  314. font-size: 19px;
  315. text-align: center;
  316. }
  317. .area-list {
  318. color: rgba(80, 80, 80, 1);
  319. font-size: 14px;
  320. line-height: 30px;
  321. }
  322. .get-more {
  323. margin: 0 auto;
  324. color: rgba(80, 80, 80, 1);
  325. font-size: 14px;
  326. width: 100%;
  327. text-align: center;
  328. }
  329. </style>