Forráskód Böngészése

对接接口,页面调整,页面跳转

lijj 2 éve
szülő
commit
504fde9842
22 módosított fájl, 586 hozzáadás és 193 törlés
  1. 5 0
      admin/src/main/java/org/springblade/modules/ycwh/controller/wx/WXFamousDishController.java
  2. 5 0
      admin/src/main/java/org/springblade/modules/ycwh/controller/wx/WXFamousSnacksController.java
  3. 4 0
      admin/src/main/java/org/springblade/modules/ycwh/controller/wx/WXFamousStoreController.java
  4. 5 0
      admin/src/main/java/org/springblade/modules/ycwh/controller/wx/WXInformationController.java
  5. 4 0
      admin/src/main/java/org/springblade/modules/ycwh/controller/wx/WXProfessionalStyleController.java
  6. 3 0
      admin/src/main/java/org/springblade/modules/ycwh/entity/FamousDishEntity.java
  7. 2 0
      admin/src/main/java/org/springblade/modules/ycwh/entity/FamousSnacksEntity.java
  8. 4 1
      admin/src/main/java/org/springblade/modules/ycwh/entity/FamousStoreEntity.java
  9. 4 3
      admin/src/main/java/org/springblade/modules/ycwh/entity/InformationInfoEntity.java
  10. 2 0
      admin/src/main/java/org/springblade/modules/ycwh/entity/ProfessionalStyleEntity.java
  11. 4 2
      miniapp/api/restaurant.js
  12. 1 1
      miniapp/common/setting.js
  13. 2 0
      miniapp/pages/yuecai/collection/index.vue
  14. 15 11
      miniapp/pages/yuecai/dish/detail/index.vue
  15. 75 42
      miniapp/pages/yuecai/dish/index.vue
  16. 137 41
      miniapp/pages/yuecai/home/index.vue
  17. 13 8
      miniapp/pages/yuecai/information/detail/index.vue
  18. 16 11
      miniapp/pages/yuecai/professional_style/detail/index.vue
  19. 16 11
      miniapp/pages/yuecai/restaurant/detail/index.vue
  20. 124 24
      miniapp/pages/yuecai/search/index1.vue
  21. 129 27
      miniapp/pages/yuecai/search/index2.vue
  22. 16 11
      miniapp/pages/yuecai/snacks/detail/index.vue

+ 5 - 0
admin/src/main/java/org/springblade/modules/ycwh/controller/wx/WXFamousDishController.java

@@ -64,6 +64,9 @@ public class WXFamousDishController extends BladeController {
 	@ApiOperation(value = "详情", notes = "传入famousDish")
 	public R<FamousDishVO> detail(FamousDishEntity famousDish) {
 		FamousDishEntity detail = famousDishService.getOne(Condition.getQueryWrapper(famousDish));
+		/** 更新浏览量 */
+		detail.setLikeNum(Func.toInt(detail.getLikeNum(), 0) + 1);
+		famousDishService.updateById(detail);
 		return R.data(FamousDishWrapper.build().entityVO(detail));
 	}
 
@@ -75,6 +78,8 @@ public class WXFamousDishController extends BladeController {
 	@ApiOperation(value = "分页", notes = "传入famousDish")
 	public R<IPage<FamousDishVO>> list(@ApiIgnore @RequestParam Map<String, Object> famousDish, Query query) {
 		IPage<FamousDishEntity> pages = famousDishService.page(Condition.getPage(query), Condition.getQueryWrapper(famousDish, FamousDishEntity.class));
+		/** 列表置空content */
+		pages.getRecords().stream().forEach(e -> e.setContent(null));
 		return R.data(FamousDishWrapper.build().pageVO(pages));
 	}
 }

+ 5 - 0
admin/src/main/java/org/springblade/modules/ycwh/controller/wx/WXFamousSnacksController.java

@@ -25,6 +25,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
 import org.springblade.modules.ycwh.entity.FamousSnacksEntity;
 import org.springblade.modules.ycwh.service.IFamousSnacksService;
 import org.springblade.modules.ycwh.vo.FamousSnacksVO;
@@ -56,6 +57,8 @@ public class WXFamousSnacksController extends BladeController {
 	@ApiOperation(value = "详情", notes = "传入famousSnacks")
 	public R<FamousSnacksVO> detail(FamousSnacksEntity famousSnacks) {
 		FamousSnacksEntity detail = famousSnacksService.getOne(Condition.getQueryWrapper(famousSnacks));
+		/** 更新浏览量 */
+		detail.setLikeNum(Func.toInt(detail.getLikeNum(), 0) + 1);
 		return R.data(FamousSnacksWrapper.build().entityVO(detail));
 	}
 
@@ -67,6 +70,8 @@ public class WXFamousSnacksController extends BladeController {
 	@ApiOperation(value = "分页", notes = "传入famousSnacks")
 	public R<IPage<FamousSnacksVO>> list(@ApiIgnore @RequestParam Map<String, Object> famousSnacks, Query query) {
 		IPage<FamousSnacksEntity> pages = famousSnacksService.page(Condition.getPage(query), Condition.getQueryWrapper(famousSnacks, FamousSnacksEntity.class));
+		/** 列表置空content */
+		pages.getRecords().stream().forEach(e -> e.setContent(null));
 		return R.data(FamousSnacksWrapper.build().pageVO(pages));
 	}
 

+ 4 - 0
admin/src/main/java/org/springblade/modules/ycwh/controller/wx/WXFamousStoreController.java

@@ -67,6 +67,8 @@ public class WXFamousStoreController extends BladeController {
 	@ApiOperation(value = "详情", notes = "传入famousStore")
 	public R<FamousStoreVO> detail(FamousStoreEntity famousStore) {
 		FamousStoreEntity detail = famousStoreService.getOne(Condition.getQueryWrapper(famousStore));
+		/** 更新浏览量 */
+		detail.setLikeNum(Func.toInt(detail.getLikeNum(), 0) + 1);
 		return R.data(FamousStoreWrapper.build().entityVO(detail));
 	}
 	/**
@@ -77,6 +79,8 @@ public class WXFamousStoreController extends BladeController {
 	@ApiOperation(value = "分页", notes = "传入famousStore")
 	public R<IPage<FamousStoreVO>> list(@ApiIgnore @RequestParam Map<String, Object> famousStore, Query query) {
 		IPage<FamousStoreEntity> pages = famousStoreService.page(Condition.getPage(query), Condition.getQueryWrapper(famousStore, FamousStoreEntity.class));
+		/** 列表置空content */
+		pages.getRecords().stream().forEach(e -> e.setContent(null));
 		return R.data(FamousStoreWrapper.build().pageVO(pages));
 	}
 

+ 5 - 0
admin/src/main/java/org/springblade/modules/ycwh/controller/wx/WXInformationController.java

@@ -23,6 +23,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.apache.poi.hssf.record.aggregates.PageSettingsBlock;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
@@ -67,6 +68,8 @@ public class WXInformationController extends BladeController {
 	@ApiOperation(value = "详情", notes = "传入informationInfo")
 	public R<InformationInfoVO> detail(InformationInfoEntity informationInfo) {
 		InformationInfoEntity detail = informationInfoService.getOne(Condition.getQueryWrapper(informationInfo));
+		/** 更新浏览量 */
+		detail.setLikeNum(Func.toInt(detail.getLikeNum(), 0) + 1);
 		return R.data(InformationInfoWrapper.build().entityVO(detail));
 	}
 
@@ -78,6 +81,8 @@ public class WXInformationController extends BladeController {
 	@ApiOperation(value = "分页", notes = "传入informationInfo")
 	public R<IPage<InformationInfoVO>> list(@ApiIgnore @RequestParam Map<String, Object> informationInfo, Query query) {
 		IPage<InformationInfoEntity> pages = informationInfoService.page(Condition.getPage(query), Condition.getQueryWrapper(informationInfo, InformationInfoEntity.class));
+		/** 列表置空content */
+		pages.getRecords().stream().forEach(e -> e.setContent(null));
 		return R.data(InformationInfoWrapper.build().pageVO(pages));
 	}
 

+ 4 - 0
admin/src/main/java/org/springblade/modules/ycwh/controller/wx/WXProfessionalStyleController.java

@@ -67,6 +67,8 @@ public class WXProfessionalStyleController extends BladeController {
 	@ApiOperation(value = "详情", notes = "传入professionalStyle")
 	public R<ProfessionalStyleVO> detail(ProfessionalStyleEntity professionalStyle) {
 		ProfessionalStyleEntity detail = professionalStyleService.getOne(Condition.getQueryWrapper(professionalStyle));
+		/** 更新浏览量 */
+		detail.setLikeNum(Func.toInt(detail.getLikeNum(), 0) + 1);
 		return R.data(ProfessionalStyleWrapper.build().entityVO(detail));
 	}
 
@@ -78,6 +80,8 @@ public class WXProfessionalStyleController extends BladeController {
 	@ApiOperation(value = "分页", notes = "传入professionalStyle")
 	public R<IPage<ProfessionalStyleVO>> list(@ApiIgnore @RequestParam Map<String, Object> professionalStyle, Query query) {
 		IPage<ProfessionalStyleEntity> pages = professionalStyleService.page(Condition.getPage(query), Condition.getQueryWrapper(professionalStyle, ProfessionalStyleEntity.class));
+		/** 列表置空content */
+		pages.getRecords().stream().forEach(e -> e.setContent(null));
 		return R.data(ProfessionalStyleWrapper.build().pageVO(pages));
 	}
 

+ 3 - 0
admin/src/main/java/org/springblade/modules/ycwh/entity/FamousDishEntity.java

@@ -101,6 +101,9 @@ public class FamousDishEntity extends BaseEntity {
 	 */
 	@ApiModelProperty(value = "置顶")
 	private Boolean top;
+
+	@ApiModelProperty(value = "点赞")
+	private Integer likeNum;
 	/**
 	 * 浏览量
 	 */

+ 2 - 0
admin/src/main/java/org/springblade/modules/ycwh/entity/FamousSnacksEntity.java

@@ -100,6 +100,8 @@ public class FamousSnacksEntity extends BaseEntity {
 	 */
 	@ApiModelProperty(value = "置顶")
 	private Boolean top;
+	@ApiModelProperty(value = "点赞")
+	private Integer likeNum;
 	/**
 	 * 浏览量
 	 */

+ 4 - 1
admin/src/main/java/org/springblade/modules/ycwh/entity/FamousStoreEntity.java

@@ -60,7 +60,7 @@ public class FamousStoreEntity extends BaseEntity {
 
 	@ApiModelProperty(value = "所属菜系")
 	private String cuisineCode;
-	
+
 	/**
 	 * 副标题
 	 */
@@ -101,6 +101,9 @@ public class FamousStoreEntity extends BaseEntity {
 	 */
 	@ApiModelProperty(value = "置顶")
 	private Boolean top;
+
+	@ApiModelProperty(value = "点赞")
+	private Integer likeNum;
 	/**
 	 * 浏览量
 	 */

+ 4 - 3
admin/src/main/java/org/springblade/modules/ycwh/entity/InformationInfoEntity.java

@@ -75,9 +75,10 @@ public class InformationInfoEntity extends BaseEntity {
 	 */
 	@ApiModelProperty(value = "内容")
 	private String content;
-	/**
-	 * 浏览量
-	 */
+
+	@ApiModelProperty(value = "点赞")
+	private Integer likeNum;
+
 	@ApiModelProperty(value = "浏览量")
 	private Integer views;
 	/**

+ 2 - 0
admin/src/main/java/org/springblade/modules/ycwh/entity/ProfessionalStyleEntity.java

@@ -97,6 +97,8 @@ public class ProfessionalStyleEntity extends BaseEntity {
 	 */
 	@ApiModelProperty(value = "置顶")
 	private Boolean top;
+	@ApiModelProperty(value = "点赞")
+	private Integer likeNum;
 	/**
 	 * 浏览量
 	 */

+ 4 - 2
miniapp/api/restaurant.js

@@ -21,14 +21,16 @@ const getRestaurantList = (current, size, vo) => {
     },
   })
 }
-const getRestaurantDetail = () => {
+const getRestaurantDetail = (id) => {
   return http.request({
     url: bizConst.basicPrefix + '/famous_store/detail',
     method: 'GET',
     header: {
       'Tenant-Id': tenantId
     },
-    params: {},
+    params: {
+      id
+    },
   })
 }
 

+ 1 - 1
miniapp/common/setting.js

@@ -9,7 +9,7 @@ module.exports = {
 	// 版本号
 	version: '0.1.0',
 	// 开发环境接口Url
-	devUrl: 'http://localhost:9232',//因为是微服务架构,所以开发环境也全部调服务器,需要调本地服务的配置到biz.js里
+	devUrl: 'http://192.168.3.162:9232',//因为是微服务架构,所以开发环境也全部调服务器,需要调本地服务的配置到biz.js里
 	// 线上环境接口Url
 	prodUrl: 'http://ycwh.pj.farwalker.cn/api',
 	// 后端数据的接收方式application/json;charset=UTF-8或者application/x-www-form-urlencoded;charset=UTF-8

+ 2 - 0
miniapp/pages/yuecai/collection/index.vue

@@ -139,6 +139,7 @@
       }
 
       .info-title {
+        word-break: break-all;
         color: #65371b;
         font-size: 24rpx;
         font-weight: 300;
@@ -173,6 +174,7 @@
       }
 
       .info-title {
+        word-break: break-all;
         text-align: center;
         color: #65371b;
         font-size: 24rpx;

+ 15 - 11
miniapp/pages/yuecai/dish/detail/index.vue

@@ -1,12 +1,10 @@
 <template>
-  <page-theme :theme="theme">
-    <template>
-      <view class="f-30 p-40 flex-dir-column flex-x-center">
-        <view>{{detailVO.address}}</view>
-        <view class="col-info-d t-c m-b-30" v-html="detailVO.content"></view>
-      </view>
-    </template>
-  </page-theme>
+  <view class="f-30 p-40 flex-dir-column flex-x-center">
+    <view class="title">{{detailVO.name}}</view>
+    <view class="col-info-d t-c m-b-30">
+      <u-parse :content="detailVO.content"></u-parse>
+    </view>
+  </view>
 </template>
 
 <script>
@@ -19,7 +17,7 @@
       }
     },
     methods: {
-      getDishDetail(id) {
+      getDetail(id) {
         this.$u.api.getDishDetail(id).then(res => {
           if (res.data.content) {
             res.data.content = decodeURIComponent(res.data.content);
@@ -29,10 +27,16 @@
       }
     },
     onLoad(options) {
-      this.getDishDetail(options.id);
+      this.getDetail(options.id);
     },
   }
 </script>
-
 <style scoped lang="scss">
+  .title {
+    width: 100%;
+    text-align: center;
+    font-size: 25px;
+    color: #65371b;
+    margin-bottom: 20px;
+  }
 </style>

+ 75 - 42
miniapp/pages/yuecai/dish/index.vue

@@ -12,24 +12,20 @@
     </view>
     <u-tabs ref="tabs" :list="tabList" :scrollable="false" :current="currentTab" @change="tabChange" lineColor="#65371b"
       :activeStyle="{color:'#65371b'}" inactiveStyle="{color:'#65371b'}"></u-tabs>
-    <view class="info-list">
-      <view class="info-item" v-for="(item, index) in 10" :key="index">
-        <view class="info-pic"></view>
-        <view class="info-title">
-          标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题
+    <u-list @scrolltolower="scrolltolower" height="calc(100% - 91px)" lowerThreshold="10">
+      <view class="info-list">
+        <view class="info-item" v-for="(item, index) in list" :key="index" @click="toDetail(item.id)">
+          <view class="info-pic">
+            <u-image width="96px" height="96px" mode="aspectFill" :src="item.cover"></u-image>
+          </view>
+          <view class="info-title">
+            {{item.name}}
+          </view>
         </view>
       </view>
-    </view>
-    <!-- <u-list @scrolltolower="scrolltolower" height="calc(100% - 180px)" lowerThreshold="10">
-      <u-list-item v-for="(item, index) in list" :key="index">
-        <u-cell :title="item.name" @click="toDetail(item.id)">
-          <u-avatar slot="icon" shape="square" size="35" :src="item.cover"
-            customStyle="margin: -3px 5px -3px 0"></u-avatar>
-        </u-cell>
-      </u-list-item>
       <u-loadmore :status="page.status" :loading-text="page.loadingText" :loadmore-text="page.loadmoreText"
         :nomore-text="page.nomoreText" />
-    </u-list> -->
+    </u-list>
   </view>
 </template>
 
@@ -39,10 +35,9 @@
     mixins: [themeMixins],
     data() {
       return {
-        bannerList: [],
         page: {
           current: 1,
-          size: 10,
+          size: 15,
           total: 0,
           // loadmore loading nomore
           status: 'loadmore',
@@ -53,51 +48,53 @@
         keyword: '',
         list: [],
         tabList: [{
-          name: '名菜'
-        }, {
           name: '名店',
+        }, {
+          name: '名菜'
         }, {
           name: '名点',
         }],
         currentTab: 0
       }
     },
-    onShow() {
+    onLoad(options) {
+      switch (options.type) {
+        case 'restaurant':
+          this.currentTab = 0;
+          break;
+        case 'dish':
+          this.currentTab = 1;
+          break;
+        case 'snacks':
+          this.currentTab = 2;
+          break;
+        default:
+          this.currentTab = 0;
+          break;
+      }
+
       this.keyword = '';
-      this.getBanners();
       this.doRefresh();
     },
     methods: {
-      tabChange(index) {
-        this.current = index;
-      },
-      clickInfo(index) {
-        if (index < 0) {
-          return;
-        }
-        uni.navigateTo({
-          url: "/pages/yuecai/information/detail/index?id=" + this.bannerList[index].id,
-        })
-      },
-      getBanners() {
-        this.$u.api.getInformationList(0, 6, {}).then(res => {
-          this.bannerList = res.data.records || []
-        })
+      tabChange(e) {
+        this.currentTab = e.index;
+        this.doRefresh();
       },
       scrolltolower() {
         this.loadmore()
       },
       loadmore() {
         this.page.current++;
-        this.getDishList();
+        this.getList();
       },
       doRefresh() {
         this.page.current = 1;
         this.page.status = 'loadmore'
         this.list = [];
-        this.getDishList();
+        this.getList();
       },
-      getDishList() {
+      getList() {
 
         if (this.page.status == 'loading' || this.page.status == 'nomore') {
           // 防止重复下拉
@@ -105,7 +102,24 @@
         }
         this.page.status = 'loading';
         //
-        this.$u.api.getDishList(this.page.current, this.page.size, {
+        let listFunc;
+        switch (this.currentTab) {
+          case 0:
+            listFunc = this.$u.api.getRestaurantList;
+            break;
+          case 1:
+            listFunc = this.$u.api.getDishList;
+            break;
+          case 2:
+            listFunc = this.$u.api.getSnacksList;
+            break;
+          default:
+            return;
+            break;
+        }
+
+        //
+        listFunc(this.page.current, this.page.size, {
           name: this.keyword || ''
         }).then(res => {
           if (res.data.records && res.data.records.length > 0) {
@@ -120,9 +134,26 @@
         })
       },
       toDetail(id) {
-        uni.navigateTo({
-          url: "/pages/yuecai/dish/detail/index?id=" + id,
-        })
+        switch (this.currentTab) {
+          case 0:
+            uni.navigateTo({
+              url: "/pages/yuecai/restaurant/detail/index?id=" + id,
+            })
+            break;
+          case 1:
+            uni.navigateTo({
+              url: "/pages/yuecai/dish/detail/index?id=" + id,
+            })
+            break;
+          case 2:
+            uni.navigateTo({
+              url: "/pages/yuecai/snacks/detail/index?id=" + id,
+            })
+            break;
+          default:
+            return;
+            break;
+        }
       }
     },
   }
@@ -136,6 +167,7 @@
   .info-list {
     display: flex;
     flex-wrap: wrap;
+    background-color: #f4f4f4;
 
     .info-item {
       padding: 20rpx;
@@ -150,6 +182,7 @@
       }
 
       .info-title {
+        word-break: break-all;
         text-align: center;
         color: #65371b;
         font-size: 24rpx;

+ 137 - 41
miniapp/pages/yuecai/home/index.vue

@@ -6,54 +6,63 @@
       </view>
       <view class="width-100">
         <u-search :clearabled="true" height="35px" placeholder="请输入搜索关键字" v-model="keyword" shape="round"
-          search="doSearch" @custom="doSearch" :showAction="false" bg-color="#e9f0f8"
+          search="doSearch" @custom="doSearch" :showAction="true" bg-color="#e9f0f8"
           placeholder-color="#65371b"></u-search>
       </view>
     </view>
-    <u-swiper height="185" :list="bannerList" @click="clickInfo" keyName="cover"></u-swiper>
-    <view class="p-l-r-30 p-t-30 dis-flex flex-x-around nav-btns">
-      <view class="nav-btn">
-        <view class="nav-btn-icon icon-circle">
-          <u-image width="32px" height="32px" mode="aspectFit" src="@/static/images/home/professional.png"></u-image>
+    <u-list @scrolltolower="scrolltolower" height="calc(100% - 47px)" lowerThreshold="10">
+
+
+      <u-swiper height="185" :list="bannerList" @click="goBannerDetail" keyName="cover" :radius="0"></u-swiper>
+      <view class="p-l-r-30 p-t-30 dis-flex flex-x-around nav-btns">
+        <view class="nav-btn" @click="navTo('professional_style')">
+          <view class="nav-btn-icon icon-circle">
+            <u-image width="32px" height="32px" mode="aspectFit" src="@/static/images/home/professional.png"></u-image>
+          </view>
+          <view class="nav-btn-text">专业风采</view>
         </view>
-        <view class="nav-btn-text">专业风采</view>
-      </view>
-      <view class="nav-btn">
-        <view class="nav-btn-icon icon-circle">
-          <u-image width="28px" height="28px" mode="aspectFit" src="@/static/images/home/dish.png"></u-image>
+        <view class="nav-btn" @click="navTo('restaurant')">
+          <view class="nav-btn-icon icon-circle">
+            <u-image width="28px" height="28px" mode="aspectFit" src="@/static/images/home/restaurant.png"></u-image>
+          </view>
+          <view class="nav-btn-text">名店</view>
         </view>
-        <view class="nav-btn-text">名菜</view>
-      </view>
-      <view class="nav-btn">
-        <view class="nav-btn-icon icon-circle">
-          <u-image width="28px" height="28px" mode="aspectFit" src="@/static/images/home/snacks.png"></u-image>
+        <view class="nav-btn" @click="navTo('dish')">
+          <view class="nav-btn-icon icon-circle">
+            <u-image width="28px" height="28px" mode="aspectFit" src="@/static/images/home/dish.png"></u-image>
+          </view>
+          <view class="nav-btn-text">名菜</view>
         </view>
-        <view class="nav-btn-text">名点</view>
-      </view>
-      <view class="nav-btn">
-        <view class="nav-btn-icon icon-circle">
-          <u-image width="28px" height="28px" mode="aspectFit" src="@/static/images/home/restaurant.png"></u-image>
+        <view class="nav-btn" @click="navTo('snacks')">
+          <view class="nav-btn-icon icon-circle">
+            <u-image width="28px" height="28px" mode="aspectFit" src="@/static/images/home/snacks.png"></u-image>
+          </view>
+          <view class="nav-btn-text">名点</view>
         </view>
-        <view class="nav-btn-text">名店</view>
+
       </view>
-    </view>
-    <view class="info-list">
-      <view class="dis-flex flex-x-between info-item" v-for="item in 10">
-        <view class="info-pic"></view>
-        <view class="info-view">
-          <view class="info-title">
-            标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题
+      <view class="info-list">
+        <view class="dis-flex flex-x-between info-item" v-for="(item, index) in list" :key="index">
+          <view class="info-pic">
+            <u-image width="96px" height="96px" mode="aspectFill" :src="item.cover"></u-image>
           </view>
-          <view class="dis-flex info-bottom">
-            <view style="margin-right: 20rpx;">10月07日</view>
-            <u-icon name="thumb-up" color="#7f7f7f" size="18"></u-icon>
-            <view style="margin-right: 20rpx;">点赞</view>
-            <u-icon name="eye" color="#7f7f7f" size="18"></u-icon>
-            <view>阅读量</view>
+          <view class="info-view" @click="goDetail(item.id)">
+            <view class="info-title">
+              {{item.subTitle}}
+            </view>
+            <view class="dis-flex info-bottom">
+              <view style="margin-right: 20rpx;">{{item.createTime?item.createTime.substring(0,10):''}}</view>
+              <u-icon name="thumb-up" color="#7f7f7f" size="18"></u-icon>
+              <view style="margin-right: 20rpx;">{{item.likeNum || 0}}点赞</view>
+              <u-icon name="eye" color="#7f7f7f" size="18"></u-icon>
+              <view>{{item.views || 0}}阅读量</view>
+            </view>
           </view>
         </view>
       </view>
-    </view>
+      <u-loadmore :status="page.status" :loading-text="page.loadingText" :loadmore-text="page.loadmoreText"
+        :nomore-text="page.nomoreText" />
+    </u-list>
   </view>
 </template>
 
@@ -66,24 +75,107 @@
         chartOption: {
 
         },
-        keyword: '',
         bannerList: [],
-        page: {},
+        //
+        page: {
+          current: 1,
+          size: 10,
+          total: 0,
+          // loadmore loading nomore
+          status: 'loadmore',
+          loadingText: '正在加载中',
+          loadmoreText: '上拉加载更多',
+          nomoreText: '没有更多了'
+        },
         keyword: '',
         list: []
       }
     },
     onLoad(options) {},
     onShow() {
-      this.getBanners()
+      this.getBanners();
+      this.doRefresh();
     },
     methods: {
+      navTo(type = '') {
+        if (!type) {
+          return;
+        }
+        if (type == 'professional_style') {
+          uni.navigateTo({
+            url: "/pages/yuecai/professional_style/index?type=" + type,
+          })
+        } else {
+          uni.navigateTo({
+            url: "/pages/yuecai/dish/index?type=" + type,
+          })
+        }
+
+        // switch (type) {
+        //   case 'restaurant':
+        //     uni.navigateTo({
+        //       url: "/pages/yuecai/restaurant/index?type=" + type,
+        //     })
+        //     break;
+        //   case 'snacks':
+        //     uni.navigateTo({
+        //       url: "/pages/yuecai/snacks/index?type=" + type,
+        //     })
+        //     break;
+        //   case 'dish':
+        //     uni.navigateTo({
+        //       url: "/pages/yuecai/dish/index?type=" + type,
+        //     })
+        //     break;
+        //   default:
+        //     break;
+        // }
+      },
       getBanners() {
         this.$u.api.getInformationList(0, 6, {}).then(res => {
           this.bannerList = res.data.records || []
         })
       },
-      clickInfo(index) {
+      scrolltolower() {
+        this.loadmore()
+      },
+      loadmore() {
+        this.page.current++;
+        this.getList();
+      },
+      doRefresh() {
+        this.page.current = 1;
+        this.page.status = 'loadmore'
+        this.list = [];
+        this.getList();
+      },
+      getList() {
+        if (this.page.status == 'loading' || this.page.status == 'nomore') {
+          // 防止重复下拉
+          return;
+        }
+        this.page.status = 'loading';
+        this.$u.api.getInformationList(this.page.current, this.page.size, {}).then(res => {
+          if (res.data.records && res.data.records.length > 0) {
+            this.list.push(...res.data.records)
+          }
+          this.page.total = res.data.total || 0;
+          if (this.page.size * this.page.current >= res.data.total) {
+            this.page.status = 'nomore'
+          } else {
+            this.page.status = 'loadmore'
+          }
+        })
+      },
+      goDetail(id) {
+        if (id <= 0) {
+          return;
+        }
+        uni.navigateTo({
+          url: "/pages/yuecai/information/detail/index?id=" + id,
+        })
+      },
+      goBannerDetail(index) {
         if (index < 0) {
           return;
         }
@@ -92,7 +184,9 @@
         })
       },
       doSearch() {
-
+        uni.navigateTo({
+          url: "/pages/yuecai/search/index2?keyword=" + this.keyword
+        })
       }
     },
   }
@@ -153,6 +247,8 @@
         width: calc(100% - 195rpx);
 
         .info-title {
+          height: 75px;
+          word-break: break-all;
           color: #65371b;
           font-size: 24rpx;
           font-weight: 300;

+ 13 - 8
miniapp/pages/yuecai/information/detail/index.vue

@@ -1,12 +1,10 @@
 <template>
-  <page-theme :theme="theme">
-    <template>
-      <view class="f-30 p-40 flex-dir-column flex-x-center">
-        <view>{{detailVO.address}}</view>
-        <view class="col-info-d t-c m-b-30" v-html="detailVO.content"></view>
-      </view>
-    </template>
-  </page-theme>
+  <view class="page-view f-30 p-40 flex-dir-column flex-x-center">
+    <view class="title">{{detailVO.title}}</view>
+    <view class="col-info-d t-c m-b-30">
+      <u-parse :content="detailVO.content"></u-parse>
+    </view>
+  </view>
 </template>
 
 <script>
@@ -36,4 +34,11 @@
 </script>
 
 <style scoped lang="scss">
+  .title {
+    width: 100%;
+    text-align: center;
+    font-size: 25px;
+    color: #65371b;
+    margin-bottom: 20px;
+  }
 </style>

+ 16 - 11
miniapp/pages/yuecai/professional_style/detail/index.vue

@@ -1,12 +1,10 @@
 <template>
-  <page-theme :theme="theme">
-    <template>
-      <view class="f-30 p-40 flex-dir-column flex-x-center">
-        <view>{{detailVO.address}}</view>
-        <view class="col-info-d t-c m-b-30" v-html="detailVO.content"></view>
-      </view>
-    </template>
-  </page-theme>
+  <view class="page-view f-30 p-40 flex-dir-column flex-x-center">
+    <view class="title">{{detailVO.title}}</view>
+    <view class="col-info-d t-c m-b-30">
+      <u-parse :content="detailVO.content"></u-parse>
+    </view>
+  </view>
 </template>
 
 <script>
@@ -19,8 +17,8 @@
       }
     },
     methods: {
-      getProfessionalStyleDetail() {
-        this.$u.api.getProfessionalStyleDetail().then(res => {
+      getDetail(id) {
+        this.$u.api.getProfessionalStyleDetail(id).then(res => {
           if (res.data.content) {
             res.data.content = decodeURIComponent(res.data.content);
           }
@@ -29,10 +27,17 @@
       }
     },
     onLoad(options) {
-      this.getProfessionalStyleDetail(options.id);
+      this.getDetail(options.id);
     },
   }
 </script>
 
 <style scoped lang="scss">
+  .title {
+    width: 100%;
+    text-align: center;
+    font-size: 25px;
+    color: #65371b;
+    margin-bottom: 20px;
+  }
 </style>

+ 16 - 11
miniapp/pages/yuecai/restaurant/detail/index.vue

@@ -1,12 +1,10 @@
 <template>
-  <page-theme :theme="theme">
-    <template>
-      <view class="f-30 p-40 flex-dir-column flex-x-center">
-        <view>{{detailVO.address}}</view>
-        <view class="col-info-d t-c m-b-30" v-html="detailVO.content"></view>
-      </view>
-    </template>
-  </page-theme>
+  <view class="page-view f-30 p-40 flex-dir-column flex-x-center">
+    <view class="title">{{detailVO.name}}</view>
+    <view class="col-info-d t-c m-b-30">
+      <u-parse :content="detailVO.content"></u-parse>
+    </view>
+  </view>
 </template>
 
 <script>
@@ -19,8 +17,8 @@
       }
     },
     methods: {
-      getRestaurantDetail() {
-        this.$u.api.getRestaurantDetail().then(res => {
+      getDetail(id) {
+        this.$u.api.getRestaurantDetail(id).then(res => {
           if (res.data.content) {
             res.data.content = decodeURIComponent(res.data.content);
           }
@@ -29,10 +27,17 @@
       }
     },
     onLoad(options) {
-      this.getRestaurantDetail(options.id);
+      this.getDetail(options.id);
     },
   }
 </script>
 
 <style scoped lang="scss">
+  .title {
+    width: 100%;
+    text-align: center;
+    font-size: 25px;
+    color: #65371b;
+    margin-bottom: 20px;
+  }
 </style>

+ 124 - 24
miniapp/pages/yuecai/search/index1.vue

@@ -10,20 +10,26 @@
           placeholder-color="#65371b"></u-search>
       </view>
     </view>
-    <!-- <u-swiper height="185" :list="bannerList" @click="clickInfo" keyName="cover"></u-swiper> -->
     <view style="width: 100%;height: 250px;">
       <qiun-data-charts type="map" :opts="mapOpts" :chartData="mapDataColumn" @getIndex="clickMap" />
     </view>
     <u-tabs ref="tabs" :list="tabList" :scrollable="false" :current="currentTab" @change="tabChange" lineColor="#65371b"
       :activeStyle="{color:'#65371b'}" inactiveStyle="{color:'#65371b'}"></u-tabs>
-    <view class="info-list">
-      <view class="info-item" v-for="(item, index) in 10" :key="index">
-        <view class="info-pic"></view>
-        <view class="info-title">
-          标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题
+    <u-list @scrolltolower="scrolltolower" height="calc(100% - 341px)" lowerThreshold="10">
+
+      <view class="info-list">
+        <view class="info-item" v-for="(item, index) in list" :key="index" @click="toDetail(item.id)">
+          <view class="info-pic">
+            <u-image width="96px" height="96px" mode="aspectFill" :src="item.cover"></u-image>
+          </view>
+          <view class="info-title">
+            {{item.name || item.title}}
+          </view>
         </view>
       </view>
-    </view>
+      <u-loadmore :status="page.status" :loading-text="page.loadingText" :loadmore-text="page.loadmoreText"
+        :nomore-text="page.nomoreText" />
+    </u-list>
   </view>
 </template>
 
@@ -96,17 +102,26 @@
         //
         chartOption: {
 
+        },
+        page: {
+          current: 1,
+          size: 15,
+          total: 0,
+          // loadmore loading nomore
+          status: 'loadmore',
+          loadingText: '正在加载中',
+          loadmoreText: '上拉加载更多',
+          nomoreText: '没有更多了'
         },
         keyword: '',
-        bannerList: [],
-        page: {},
+        areaCode: '',
         list: [],
         tabList: [{
           name: '专业风采'
-        }, {
-          name: '名菜'
         }, {
           name: '名店',
+        }, {
+          name: '名菜'
         }, {
           name: '名点',
         }],
@@ -134,29 +149,113 @@
     },
     onLoad(options) {},
     onShow() {
-      this.getBanners()
+      this.doRefresh()
     },
     methods: {
       clickMap(e) {
-        debugger
+        if (e.currentIndex < 0) {
+          this.areaCode = '';
+        } else {
+          this.areaCode = e.opts.series[e.currentIndex].properties.adcode || '';
+        }
+
+        this.areaSearch();
       },
-      tabChange(index) {
-        this.current = index;
+      tabChange(e) {
+        this.currentTab = e.index;
+        this.doRefresh();
       },
-      getBanners() {
-        this.$u.api.getInformationList(0, 6, {}).then(res => {
-          this.bannerList = res.data.records || []
-        })
+      scrolltolower() {
+        this.loadmore()
       },
-      clickInfo(index) {
-        if (index < 0) {
+      loadmore() {
+        this.page.current++;
+        this.getList();
+      },
+      areaSearch() {
+        this.page.current = 1;
+        this.page.status = 'loadmore';
+        this.list = [];
+        this.getList();
+      },
+      doRefresh() {
+        this.page.current = 1;
+        this.page.status = 'loadmore';
+        this.areaCode = '';
+        this.list = [];
+        this.getList();
+      },
+      getList() {
+        if (this.page.status == 'loading' || this.page.status == 'nomore') {
+          // 防止重复下拉
           return;
         }
-        uni.navigateTo({
-          url: "/pages/yuecai/information/detail/index?id=" + this.bannerList[index].id,
+        this.page.status = 'loading';
+        //
+        let listFunc, params = {};
+        switch (this.currentTab) {
+          case 0:
+            listFunc = this.$u.api.getProfessionalStyleList;
+            params.title = this.keyword || '';
+            break;
+          case 1:
+            listFunc = this.$u.api.getRestaurantList;
+            params.name = this.keyword || '';
+            params.regionId = this.areaCode || '';
+            break;
+          case 2:
+            listFunc = this.$u.api.getDishList;
+            params.name = this.keyword || '';
+            params.regionId = this.areaCode || '';
+            break;
+          case 3:
+            listFunc = this.$u.api.getSnacksList;
+            params.name = this.keyword || '';
+            params.regionId = this.areaCode || '';
+            break;
+          default:
+            return;
+            break;
+        }
+        //
+        listFunc(this.page.current, this.page.size, params).then(res => {
+          if (res.data.records && res.data.records.length > 0) {
+            this.list.push(...res.data.records)
+          }
+          this.page.total = res.data.total || 0;
+          if (this.page.size * this.page.current >= res.data.total) {
+            this.page.status = 'nomore'
+          } else {
+            this.page.status = 'loadmore'
+          }
         })
       },
-      doSearch() {
+      toDetail(id) {
+        switch (this.currentTab) {
+          case 0:
+            uni.navigateTo({
+              url: "/pages/yuecai/professional_style/detail/index?id=" + id,
+            })
+            break;
+          case 1:
+            uni.navigateTo({
+              url: "/pages/yuecai/restaurant/detail/index?id=" + id,
+            })
+            break;
+          case 2:
+            uni.navigateTo({
+              url: "/pages/yuecai/dish/detail/index?id=" + id,
+            })
+            break;
+          case 3:
+            uni.navigateTo({
+              url: "/pages/yuecai/snacks/detail/index?id=" + id,
+            })
+            break;
+          default:
+            return;
+            break;
+        }
 
       }
     },
@@ -221,6 +320,7 @@
       }
 
       .info-title {
+        word-break: break-all;
         text-align: center;
         color: #65371b;
         font-size: 24rpx;

+ 129 - 27
miniapp/pages/yuecai/search/index2.vue

@@ -10,23 +10,30 @@
     </view>
     <u-tabs ref="tabs" :list="tabList" :scrollable="false" :current="currentTab" @change="tabChange" lineColor="#65371b"
       :activeStyle="{color:'#65371b'}" inactiveStyle="{color:'#65371b'}"></u-tabs>
-    <view class="info-list">
-      <view class="dis-flex flex-x-between info-item" v-for="(item, index) in 10" :key="index">
-        <view class="info-pic"></view>
-        <view class="info-view">
-          <view class="info-title">
-            标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题标题
+    <u-list @scrolltolower="scrolltolower" height="calc(100% - 91px)" lowerThreshold="10">
+      <view class="info-list">
+        <view class="dis-flex flex-x-between info-item" v-for="(item, index) in list" :key="index"
+          @click="toDetail(item.id)">
+          <view class="info-pic">
+            <u-image width="96px" height="96px" mode="aspectFill" :src="item.cover"></u-image>
           </view>
-          <view class="dis-flex info-bottom">
-            <view style="margin-right: 20rpx;">10月07日</view>
-            <u-icon name="thumb-up" color="#7f7f7f" size="18"></u-icon>
-            <view style="margin-right: 20rpx;">点赞</view>
-            <u-icon name="eye" color="#7f7f7f" size="18"></u-icon>
-            <view>阅读量</view>
+          <view class="info-view">
+            <view class="info-title">
+              {{item.subTitle}}
+            </view>
+            <view class="dis-flex info-bottom">
+              <view style="margin-right: 20rpx;">{{item.createTime?item.createTime.substring(0,10):''}}</view>
+              <u-icon name="thumb-up" color="#7f7f7f" size="18"></u-icon>
+              <view style="margin-right: 20rpx;">{{item.likeNum || 0}}点赞</view>
+              <u-icon name="eye" color="#7f7f7f" size="18"></u-icon>
+              <view>{{item.views || 0}}阅读量</view>
+            </view>
           </view>
         </view>
       </view>
-    </view>
+      <u-loadmore :status="page.status" :loading-text="page.loadingText" :loadmore-text="page.loadmoreText"
+        :nomore-text="page.nomoreText" />
+    </u-list>
   </view>
 </template>
 
@@ -36,9 +43,6 @@
     mixins: [themeMixins],
     data() {
       return {
-        keyword: '',
-        page: {},
-        list: [],
         tabList: [{
           name: '专业风采'
         }, {
@@ -48,26 +52,122 @@
         }, {
           name: '名点',
         }],
-        currentTab: 0
+        currentTab: 0,
+        //
+        page: {
+          current: 1,
+          size: 10,
+          total: 0,
+          // loadmore loading nomore
+          status: 'loadmore',
+          loadingText: '正在加载中',
+          loadmoreText: '上拉加载更多',
+          nomoreText: '没有更多了'
+        },
+        keyword: '',
+        list: []
       }
     },
-    onLoad(options) {},
-    onShow() {},
+    onLoad(options) {
+      this.keyword = options.keyword;
+    },
+    onShow() {
+      this.doRefresh();
+    },
     methods: {
-      tabChange(index) {
-        this.current = index;
+      tabChange(e) {
+        this.currentTab = e.index;
+        this.doRefresh();
+      },
+      scrolltolower() {
+        this.loadmore()
       },
-      clickInfo(index) {
-        if (index < 0) {
+      loadmore() {
+        this.page.current++;
+        this.getList();
+      },
+      doSearch() {
+        this.doRefresh();
+      },
+      doRefresh() {
+        this.page.current = 1;
+        this.page.status = 'loadmore'
+        this.list = [];
+        this.getList();
+      },
+      getList() {
+        if (this.page.status == 'loading' || this.page.status == 'nomore') {
+          // 防止重复下拉
           return;
         }
-        uni.navigateTo({
-          url: "/pages/yuecai/information/detail/index?id=" + this.bannerList[index].id,
+        this.page.status = 'loading';
+        //
+        let listFunc, params = {};
+        switch (this.currentTab) {
+          case 0:
+            listFunc = this.$u.api.getProfessionalStyleList;
+            params.title = this.keyword || '';
+            break;
+          case 1:
+            listFunc = this.$u.api.getRestaurantList;
+            params.name = this.keyword || '';
+            params.regionId = this.areaCode || '';
+            break;
+          case 2:
+            listFunc = this.$u.api.getDishList;
+            params.name = this.keyword || '';
+            params.regionId = this.areaCode || '';
+            break;
+          case 3:
+            listFunc = this.$u.api.getSnacksList;
+            params.name = this.keyword || '';
+            params.regionId = this.areaCode || '';
+            break;
+          default:
+            return;
+            break;
+        }
+        //
+        listFunc(this.page.current, this.page.size, params).then(res => {
+          if (res.data.records && res.data.records.length > 0) {
+            this.list.push(...res.data.records)
+          }
+          this.page.total = res.data.total || 0;
+          if (this.page.size * this.page.current >= res.data.total) {
+            this.page.status = 'nomore'
+          } else {
+            this.page.status = 'loadmore'
+          }
         })
       },
-      doSearch() {
+      toDetail(id) {
+        switch (this.currentTab) {
+          case 0:
+            uni.navigateTo({
+              url: "/pages/yuecai/professional_style/detail/index?id=" + id,
+            })
+            break;
+          case 1:
+            uni.navigateTo({
+              url: "/pages/yuecai/restaurant/detail/index?id=" + id,
+            })
+            break;
+          case 2:
+            uni.navigateTo({
+              url: "/pages/yuecai/dish/detail/index?id=" + id,
+            })
+            break;
+          case 3:
+            uni.navigateTo({
+              url: "/pages/yuecai/snacks/detail/index?id=" + id,
+            })
+            break;
+          default:
+            return;
+            break;
+        }
 
-      }
+      },
     },
   }
 </script>
@@ -132,6 +232,8 @@
         width: calc(100% - 195rpx);
 
         .info-title {
+          height: 75px;
+          word-break: break-all;
           color: #65371b;
           font-size: 24rpx;
           font-weight: 300;

+ 16 - 11
miniapp/pages/yuecai/snacks/detail/index.vue

@@ -1,12 +1,10 @@
 <template>
-  <page-theme :theme="theme">
-    <template>
-      <view class="f-30 p-40 flex-dir-column flex-x-center">
-        <view>{{detailVO.address}}</view>
-        <view class="col-info-d t-c m-b-30" v-html="detailVO.content"></view>
-      </view>
-    </template>
-  </page-theme>
+  <view class="page-view f-30 p-40 flex-dir-column flex-x-center">
+    <view class="title">{{detailVO.name}}</view>
+    <view class="col-info-d t-c m-b-30">
+      <u-parse :content="detailVO.content"></u-parse>
+    </view>
+  </view>
 </template>
 
 <script>
@@ -19,8 +17,8 @@
       }
     },
     methods: {
-      getSnacksDetail() {
-        this.$u.api.getSnacksDetail().then(res => {
+      getDetail(id) {
+        this.$u.api.getSnacksDetail(id).then(res => {
           if (res.data.content) {
             res.data.content = decodeURIComponent(res.data.content);
           }
@@ -29,10 +27,17 @@
       }
     },
     onLoad(options) {
-      this.getSnacksDetail(options.id);
+      this.getDetail(options.id);
     },
   }
 </script>
 
 <style scoped lang="scss">
+  .title {
+    width: 100%;
+    text-align: center;
+    font-size: 25px;
+    color: #65371b;
+    margin-bottom: 20px;
+  }
 </style>