From 2206df0da6499846c78a358cf95ca33c218a5c5d Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期三, 14 九月 2022 08:43:37 +0800
Subject: [PATCH] 2022.9.13

---
 pages/m_consult/behaviors/b_search.js                          |   52 +
 pages/m_learn/base_c/c_learn-item/c_learn-item.wxss            |   27 
 pages/m_learn/learncase/learncase.json                         |    7 
 pages/m_service/c_schedule/c_schedule.wxml                     |   15 
 pages/m_consult/consultdetailqa/consultdetailqa.js             |    6 
 pages/m_consult/c_result-item-search/c_result-item-search.wxss |    0 
 pages/m_learn/learfile/learnfile.wxml                          |   38 
 pages/m_service/c_schedule/c_schedule.js                       |   66 +
 pages/m_consult/consultproblem/consultproblem.json             |    2 
 component/loadingstatus/loadingstatus.json                     |    6 
 pages/m_common/pagevideo/pagevideo.wxss                        |    4 
 pages/m_learn/base_c/c_learn-item/c_learn-item.js              |   40 
 pages/m_consult/base_c/c_result-item/c_result-item.json        |    6 
 service/baserequest.js                                         |    4 
 pages/m_consult/consultdetailcase/consultdetailcase.js         |    4 
 pages/m_consult/consulthome/consulthome.json                   |    3 
 pages/m_consult/consultdetailitem/consultdetailitem.js         |    4 
 pages/m_learn/learn/learn.wxss                                 |   27 
 pages/home/home.wxss                                           |    3 
 pages/m_consult/behaviors/b_elementTypes.js                    |  151 +++
 pages/home/home.json                                           |    3 
 pages/m_service/p_schedule/p_schedule.json                     |    5 
 base/ListPage.js                                               |   19 
 pages/m_consult/base_c/c_result-item/c_result-item.wxss        |  104 ++
 pages/m_consult/c_result-item-search/c_result-item-search.json |    6 
 pages/m_consult/consultonline/consultonline.wxml               |   12 
 pages/m_service/p_schedule/p_schedule.js                       |  110 ++
 pages/m_consult/consultonline/consultonline.js                 |   60 
 component/loadingstatus/loadingstatus.wxml                     |   13 
 pages/m_service/p_scheduledetail/p_scheduledetail.wxss         |   81 +
 pages/m_service/c_schedule/c_schedule.json                     |    4 
 component/switchtab/switchtab.js                               |   42 
 pages/m_learn/learncase/learncase.js                           |   51 
 pages/m_learn/learfile/learnfile.json                          |    7 
 pages/m_service/p_schedule/p_schedule.wxml                     |   26 
 pages/m_learn/behaviors/b_fetch.js                             |   60 +
 pages/m_learn/learn/learn.json                                 |    3 
 component/switchtab/switchtab.wxml                             |    6 
 pages/m_consult/base_c/c_result-item/c_result-item.js          |   78 +
 pages/m_consult/consulthome/consulthome.wxml                   |  150 --
 project.config.json                                            |    5 
 pages/m_learn/base_c/c_learn-item/c_learn-item.wxml            |   32 
 pages/m_service/c_schedule/c_schedule.wxss                     |   47 
 app.wxss                                                       |    2 
 pages/m_consult/c_result-item-search/c_result-item-search.js   |   58 +
 res/icons/schedule_2.png                                       |    0 
 res/icons/schedule_1.png                                       |    0 
 pages/m_consult/consultproblem/consultproblem.wxml             |   30 
 pages/m_service/p_scheduledetail/p_scheduledetail.json         |    5 
 pages/m_consult/consultproblem/consultproblem.js               |  201 ----
 pages/m_consult/behaviors/b_questions.js                       |   59 +
 pages/m_consult/consultdetail/consultdetail.js                 |    6 
 app.js                                                         |    1 
 pages/m_common/pagevideo/pagevideo.wxml                        |    2 
 pages/m_learn/learncase/learncase.wxml                         |    8 
 res/icons/text_star.png                                        |    0 
 component/loadingstatus/loadingstatus.js                       |   37 
 pages/home/home.wxml                                           |    4 
 pages/m_consult/consulthome/consulthome.js                     |  200 ---
 pages/m_learn/learn/learn.wxml                                 |   62 -
 pages/m_consult/consultsearch/consultsearch.json               |    2 
 base/behaviors/b_loadingStatus.js                              |   64 +
 pages/m_consult/base_c/c_result-item/c_result-item.wxml        |  113 ++
 component/loadingstatus/loadingstatus.wxss                     |    7 
 service/consultservice.js                                      |   11 
 pages/m_learn/learn/learn.js                                   |  130 --
 pages/m_service/p_scheduledetail/p_scheduledetail.wxml         |   33 
 pages/test2/test2.js                                           |   60 +
 pages/m_learn/learfile/learnfile.js                            |   60 -
 app.json                                                       |   14 
 pages/m_consult/consulthome/consulthome.wxss                   |   98 --
 pages/m_consult/consultproblem/consultproblem.wxss             |   62 -
 pages/m_learn/base_c/c_learn-item/c_learn-item.json            |    7 
 pages/m_service/p_schedule/p_schedule.wxss                     |  104 ++
 pages/m_service/p_scheduledetail/p_scheduledetail.js           |   36 
 component/switchtab/switchtab.wxss                             |    2 
 pages/m_consult/c_result-item-search/c_result-item-search.wxml |    1 
 pages/m_learn/behaviors/b_openFile.js                          |   10 
 pages/m_consult/consultresult/consultresult.wxml               |    2 
 79 files changed, 1,755 insertions(+), 1,125 deletions(-)

diff --git a/app.js b/app.js
index 21651da..ac97cb9 100644
--- a/app.js
+++ b/app.js
@@ -15,6 +15,7 @@
     console.log('onLaunch');
   },
   globalData: {
+    perPage: 5,
     userInfo: null,
     accessToken: null,
     isLogin: false
diff --git a/app.json b/app.json
index 1edee92..c283614 100644
--- a/app.json
+++ b/app.json
@@ -2,14 +2,11 @@
   "entryPagePath": "pages/m_user/userlogin/userlogin",
   "pages": [
     "pages/home/home",
-
     "pages/m_assessment/assessment/assessment",
     "pages/m_assessment/grade/grade",
     "pages/m_assessment/gradedetail/gradedetail",
     "pages/m_assessment/gradereport/gradereport",
-
     "pages/m_common/pagevideo/pagevideo",
-
     "pages/m_consult/consulthome/consulthome",
     "pages/m_consult/consultsearch/consultsearch",
     "pages/m_consult/consultresult/consultresult",
@@ -20,36 +17,31 @@
     "pages/m_consult/consultdetailitem/consultdetailitem",
     "pages/m_consult/consultdetailqa/consultdetailqa",
     "pages/m_consult/consultdetailcase/consultdetailcase",
-
     "pages/m_learn/learn/learn",
     "pages/m_learn/learfile/learnfile",
     "pages/m_learn/learncase/learncase",
-
     "pages/m_ledger/ledgerhome/ledgerhome",
     "pages/m_ledger/ledgerupload/ledgerupload",
     "pages/m_ledger/ledgerhistory/ledgerhistory",
-
     "pages/m_notice/notice/notice",
-    
     "pages/m_promise/promiseinfo/promiseinfo",
     "pages/m_promise/promisehome/promise",
     "pages/m_promise/promisefile/promisefile",
     "pages/m_promise/promiseresult/promiseresult",
     "pages/m_promise/promisesign/promisesign",
-
     "pages/m_service/p_servicehome/servicehome",
-        
     "pages/m_user/userloginpw/userloginpw",
     "pages/m_user/userregistertype/userregistertype",
     "pages/m_user/userregistergov/userregistergov",
     "pages/m_user/userregistercompany/userregistercompany",
     "pages/m_user/mine/mine",
     "pages/m_user/userlogin/userlogin",
-
     "pages/icons/icons",
     "pages/text/text",
     "pages/test/test",
-    "pages/test2/test2"
+    "pages/test2/test2",
+    "pages/m_service/p_schedule/p_schedule",
+    "pages/m_service/p_scheduledetail/p_scheduledetail"
   ],
   "window": {
     "backgroundTextStyle": "light",
diff --git a/app.wxss b/app.wxss
index 29994ec..031ca21 100644
--- a/app.wxss
+++ b/app.wxss
@@ -87,7 +87,7 @@
   display: flex;
   flex-direction: column;
   align-items: center;
-  height: 100vh;
+  height: 50vh;
 }
 
 .no-data image {
diff --git a/base/ListPage.js b/base/ListPage.js
new file mode 100644
index 0000000..efdf835
--- /dev/null
+++ b/base/ListPage.js
@@ -0,0 +1,19 @@
+//鍒楄〃椤甸潰鍩虹被锛屽畾涔変笅鎷夊埛鏂颁笌涓婃粦鍔犺浇鍔ㄤ綔
+const ListPage = function (options) {
+  return Page(
+    Object.assign({}, options, {
+      onPullDownRefresh() {
+        this.setData({
+          pullDown: true
+        })
+      },
+      onReachBottom() {
+        this.setData({
+          reachBottom: true
+        })
+      }
+    })
+  )
+}
+
+export default ListPage
\ No newline at end of file
diff --git a/base/behaviors/b_loadingStatus.js b/base/behaviors/b_loadingStatus.js
new file mode 100644
index 0000000..ad6bf06
--- /dev/null
+++ b/base/behaviors/b_loadingStatus.js
@@ -0,0 +1,64 @@
+/**
+ * 鏁版嵁鍔犺浇鐩戝惉
+ */
+module.exports = Behavior({
+  data: {
+    cPage: 1,
+    tPage: 1,
+    totalCount: 0,
+    loading: false,
+    needLoadMore: false
+  },
+  observers: {
+    'loading': function (loading) {
+      if (loading) {
+        this._loadStart()
+        this._loading()
+      } else {
+        this._loadComplete()
+      }
+    },
+    'cPage, tPage': function (cPage, tPage) {
+      this.setData({
+        needLoadMore: cPage < tPage
+      })
+    },
+    'reachBottom': function(reachBottom) {
+      if (reachBottom) {
+        this._onReachBottom()
+      }
+    },
+  },
+  methods: {
+    _onReachBottom() {
+      console.log('_onReachBottom');
+      let {cPage, tPage, loading} = this.data
+      if (!loading && cPage < tPage) {
+        if (typeof this.loadmore === 'function') {
+          this.loadmore(cPage)          
+        }
+      }
+    },
+    // 鍔犺浇寮�濮嬮�氱煡
+    _loadStart() {
+      this.triggerEvent('loadStart')
+      if (typeof this.loadStart === 'function') {
+        this.loadStart()
+      }
+    },
+    // 鍔犺浇涓�氱煡
+    _loading() {
+      this.triggerEvent('loading')
+      if (typeof this.loading === 'function') {
+        this.loading()
+      }
+    },
+    // 鍔犺浇瀹屾垚閫氱煡
+    _loadComplete() {
+      this.triggerEvent('loadComplete')
+      if (typeof this.loadComplete === 'function') {
+        this.loadComplete()
+      }
+    }
+  }
+})
\ No newline at end of file
diff --git a/component/loadingstatus/loadingstatus.js b/component/loadingstatus/loadingstatus.js
new file mode 100644
index 0000000..d6d47cf
--- /dev/null
+++ b/component/loadingstatus/loadingstatus.js
@@ -0,0 +1,37 @@
+// component/loadingstatus/loadingstatus.js
+Component({
+  options: {
+    addGlobalClass: true
+  },
+  /**
+   * 缁勪欢鐨勫睘鎬у垪琛�
+   */
+  properties: {
+    loading: {
+      type: Boolean,
+      value: false
+    },
+    needLoadMore: {
+      type: Boolean,
+      value: false
+    },
+    nodata: {
+      type: Boolean,
+      value: false
+    },
+  },
+
+  /**
+   * 缁勪欢鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 缁勪欢鐨勬柟娉曞垪琛�
+   */
+  methods: {
+
+  }
+})
diff --git a/component/loadingstatus/loadingstatus.json b/component/loadingstatus/loadingstatus.json
new file mode 100644
index 0000000..3cf63c6
--- /dev/null
+++ b/component/loadingstatus/loadingstatus.json
@@ -0,0 +1,6 @@
+{
+  "component": true,
+  "usingComponents": {
+    "mp-loading": "/component/loading/loading"
+  }
+}
\ No newline at end of file
diff --git a/component/loadingstatus/loadingstatus.wxml b/component/loadingstatus/loadingstatus.wxml
new file mode 100644
index 0000000..2fd736e
--- /dev/null
+++ b/component/loadingstatus/loadingstatus.wxml
@@ -0,0 +1,13 @@
+<!--component/loadingstatus/loadingstatus.wxml-->
+<import src="/template/nodata.wxml"></import>
+
+<template wx:if="{{!loading && nodata}}" is="nodataPage"></template>
+<block wx:else="">
+  <view wx:if="{{!loading}}" class="load-more">
+    <text wx:if="{{needLoadMore}}">涓婃粦鍔犺浇</text>
+    <text wx:else="">鈥斺�斿埌搴曚簡鈥斺��</text>
+  </view>
+  <view wx:else class="load-more">
+    <mp-loading duration="{{900}}" type="dot-gray" show="{{true}}" animated="{{true}}"></mp-loading>
+  </view>
+</block>
\ No newline at end of file
diff --git a/component/loadingstatus/loadingstatus.wxss b/component/loadingstatus/loadingstatus.wxss
new file mode 100644
index 0000000..3db6a92
--- /dev/null
+++ b/component/loadingstatus/loadingstatus.wxss
@@ -0,0 +1,7 @@
+/* component/loadingstatus/loadingstatus.wxss */
+.load-more {
+  text-align: center;
+  font-size: 12px;
+  color: var(--fyui-text-color_3);
+  padding: 8px;
+}
\ No newline at end of file
diff --git a/component/switchtab/switchtab.js b/component/switchtab/switchtab.js
index 59d2ed3..48f52b6 100644
--- a/component/switchtab/switchtab.js
+++ b/component/switchtab/switchtab.js
@@ -12,9 +12,11 @@
       type: Array,
       value: []
     },
-    pageList: {
-      type: Array,
-      value: []
+    //閫氱煡缁勪欢鍒锋柊楂樺害
+    refresh: {
+      type: Boolean,
+      value: false,
+      observer: 'refreshHeight'
     },
   },
 
@@ -27,34 +29,24 @@
     // pageheight: '600px',
   },
 
-  observers: {
-    'pageList': function() {
-      this.tabsHeight('.page0');
-    }
-  },
-
   /**
    * 缁勪欢鐨勬柟娉曞垪琛�
    */
   methods: {
+    refreshHeight: function(e) {
+      // console.log(`refreshHeight: ${e}`);
+      if (e) {
+        setTimeout(() => {
+          const p = `.page${this.data.currentTab}`
+          this.tabsHeight(p);
+        }, 50);
+      }
+    },
     //璁$畻swiper楂樺害鏂规硶锛堝湪鍒囨崲鐨勬椂鍊欒皟鐢級
     tabsHeight(element) {
       let that = this;
       let query = this.createSelectorQuery(); //蹇呴』瑕佸厛鍒涘缓涓�涓煡璇�
       query.select(element).boundingClientRect(function (rect) {
-        // if (that.data.pageheight) {
-        //   let pageheight = that.data.pageheight.split('px')[0]
-        //   pageheight = parseInt(pageheight)
-        //   if (rect.height > pageheight) {
-        //     that.setData({
-        //       pageheight: rect.height + 'px'
-        //     });
-        //   }
-        // } else {
-        //   that.setData({
-        //     pageheight: rect.height + 'px'
-        //   });
-        // }
         that.setData({
           pageheight: rect.height + 'px'
         });
@@ -67,18 +59,16 @@
       } else {
         that.setData({
           currentTab: e.target.dataset.current,
-          navScrollLeft: e.target.dataset.current >= 3 ? ((e.target.dataset.current) * 60) : 0 //鍒ゆ柇褰撳墠閫変腑鐨勪釜鏁版槸鍚︽槸绗�5涓�
         })
-        // that.tabsHeight('.page' + e.target.dataset.current); //鏌ヨ鍝竴涓厓绱�
       }
     },
     bindChange: function (e) {
       var that = this;
       that.setData({
         currentTab: e.detail.current,
-        navScrollLeft: e.detail.current >= 3 ? ((e.detail.current) * 60) : 0 //鍒ゆ柇褰撳墠閫変腑鐨勪釜鏁版槸鍚︽槸绗�5涓�
       });
-      that.tabsHeight('.page' + e.detail.current); //鏌ヨ鍝竴涓厓绱�        
+      that.tabsHeight('.page' + e.detail.current); //鏌ヨ鍝竴涓厓绱�
+      this.triggerEvent('tabchange', this.data.currentTab)
     },
   }
 })
\ No newline at end of file
diff --git a/component/switchtab/switchtab.wxml b/component/switchtab/switchtab.wxml
index 9137a41..4baba88 100644
--- a/component/switchtab/switchtab.wxml
+++ b/component/switchtab/switchtab.wxml
@@ -1,8 +1,8 @@
 <!--component/switchtab/switchtab.wxml-->
 <view class="swiper-tab">
-  <scroll-view class="swiper-tab_view" scroll-left="{{navScrollLeft}}" scroll-x="true" show-scrollbar="true" scroll-with-animation="true">
+  <scroll-view class="swiper-tab_view" scroll-into-view="item{{currentTab}}" scroll-x="true" show-scrollbar="true" scroll-with-animation="true">
     <block wx:for="{{tabList}}" wx:key="i">
-      <view class="swiper-tab-list {{currentTab==index ? 'on' : ''}}" data-current="{{index}}" bindtap="swichNav">
+      <view id="item{{index}}" class="swiper-tab-list {{currentTab==index ? 'on' : ''}}" data-current="{{index}}" bindtap="swichNav">
         {{item.name}}
         <text wx:if="{{item.tag > 0}}" class="swiper-tab-list__tag">{{item.tag}}</text>
       </view>
@@ -11,7 +11,7 @@
 </view>
 
 <swiper current="{{currentTab}}" class="swiper-box" duration="300" bindchange="bindChange" style="height: {{pageheight}};">
-  <block wx:for="{{pageList}}" wx:for-item="item" wx:key="index" wx:for-index="index">
+  <block wx:for="{{tabList}}" wx:key="index">
     <swiper-item>
       <view class="page{{index}}">
         <slot name="slot{{index}}"></slot>
diff --git a/component/switchtab/switchtab.wxss b/component/switchtab/switchtab.wxss
index b1ae106..85f835c 100644
--- a/component/switchtab/switchtab.wxss
+++ b/component/switchtab/switchtab.wxss
@@ -48,5 +48,5 @@
   width: 100%;
   /* height: 70px; */
   margin-top: 1px;
-  background-color: white;
+  /* background-color: white; */
 }
\ No newline at end of file
diff --git a/pages/home/home.json b/pages/home/home.json
index feafd09..2171ed4 100644
--- a/pages/home/home.json
+++ b/pages/home/home.json
@@ -2,6 +2,7 @@
   "navigationBarBackgroundColor": "#EAFFF1",
   "enablePullDownRefresh":true,
   "usingComponents": {
-    "cp-notice": "/component/notice/notice"
+    "cp-notice": "/component/notice/notice",
+    "c-schedule": "../m_service/c_schedule/c_schedule"
   }
 }
\ No newline at end of file
diff --git a/pages/home/home.wxml b/pages/home/home.wxml
index 3d8627d..aab14e5 100644
--- a/pages/home/home.wxml
+++ b/pages/home/home.wxml
@@ -22,7 +22,7 @@
         </view>
       </view>
     </view> -->
-    <view class="flex-h">
+    <view class="flex-h" style="margin-top: 4px;">
       <view class="flex-h_block">
         <view class="top-card" bindtap="goto" data-index="0">
           <view>
@@ -101,6 +101,8 @@
       </view>
     </view>
 
+    <c-schedule></c-schedule>
+
     <view class="fyui-panel">
       <view class="fyui-cell fyui-cell_select title">
         <view class="fyui-cell__hd">
diff --git a/pages/home/home.wxss b/pages/home/home.wxss
index 2045d23..d73b853 100644
--- a/pages/home/home.wxss
+++ b/pages/home/home.wxss
@@ -9,6 +9,9 @@
   font-size: 18px;
   color: var(--fyui-text-color_1);
   /* font-weight: 600; */
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
 }
 
 .flex-h_block{
diff --git a/pages/m_common/pagevideo/pagevideo.wxml b/pages/m_common/pagevideo/pagevideo.wxml
index c4d6098..3a2a255 100644
--- a/pages/m_common/pagevideo/pagevideo.wxml
+++ b/pages/m_common/pagevideo/pagevideo.wxml
@@ -23,7 +23,7 @@
   <view class="page__ft">
     <view class="title">鐩稿叧瑙嗛</view>
     <view wx:for="{{resources}}" wx:key="index" wx:item="item">
-      <view class="fyui-box fyui-panel" bindtap="gotoResource" data-index="{{index}}">
+      <view class="fyui-box" bindtap="gotoResource" data-index="{{index}}">
         <view class="fyui-box__hd">
           <image src="{{item.lrPicurl}}" class="" mode="aspectFill"/>
         </view>
diff --git a/pages/m_common/pagevideo/pagevideo.wxss b/pages/m_common/pagevideo/pagevideo.wxss
index 4275664..a7649b9 100644
--- a/pages/m_common/pagevideo/pagevideo.wxss
+++ b/pages/m_common/pagevideo/pagevideo.wxss
@@ -11,4 +11,8 @@
   padding: 0 16px;
   font-weight: 600;
   font-size: 16px;
+}
+
+.fyui-box__content {
+  text-align: start;
 }
\ No newline at end of file
diff --git a/pages/m_consult/base_c/c_result-item/c_result-item.js b/pages/m_consult/base_c/c_result-item/c_result-item.js
new file mode 100644
index 0000000..2d3a1c6
--- /dev/null
+++ b/pages/m_consult/base_c/c_result-item/c_result-item.js
@@ -0,0 +1,78 @@
+/**
+ * 鏅鸿兘鍜ㄨ鏌ヨ缁撴灉鍒楄〃缁勪欢
+ */
+
+Component({
+  options: {
+    addGlobalClass: true,
+  },
+  /**
+   * 缁勪欢鐨勫睘鎬у垪琛�
+   */
+  properties: {
+    //鏌ヨ缁撴灉
+    results: {
+      type: Array,
+      value: []
+    },
+    loading: {
+      type: Boolean,
+      value: false
+    },
+    needLoadMore: {
+      type: Boolean,
+      value: false
+    },
+  },
+
+
+  /**
+   * 缁勪欢鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    
+  },
+
+  /**
+   * 缁勪欢鐨勬柟娉曞垪琛�
+   */
+  methods: {
+    /**
+     * 璺宠浆娉曡鏂囦欢銆佹潯鐩�佹渚嬨�侀棶绛旂殑璇︽儏鐣岄潰
+     */
+    gotoDetail(e) {
+      const {index, type} = e.currentTarget.dataset
+      const id = this.data.results[index].id
+      let url = ''
+      switch (type) {
+        case 1:
+          url = '/pages/m_consult/consultdetail/consultdetail'
+          break;
+        case 2:
+          url = '/pages/m_consult/consultdetailitem/consultdetailitem'
+          break;
+        case 3:
+          url = '/pages/m_consult/consultdetailcase/consultdetailcase'
+          break;
+        case 4:
+          url = '/pages/m_consult/consultdetailqa/consultdetailqa'
+          break;
+        default:
+          break;
+      }
+      if (url != '') {
+        wx.navigateTo({
+          url: url,
+          success: (res) => {
+            res.eventChannel.emit('acceptDataFromOpenerPage', {
+              id: id
+            })
+          },
+        })
+      } else {
+        console.log('b_search: gotoDetail, url涓虹┖');
+      }
+    },
+
+  }
+})
\ No newline at end of file
diff --git a/pages/m_consult/base_c/c_result-item/c_result-item.json b/pages/m_consult/base_c/c_result-item/c_result-item.json
new file mode 100644
index 0000000..d3aa8c8
--- /dev/null
+++ b/pages/m_consult/base_c/c_result-item/c_result-item.json
@@ -0,0 +1,6 @@
+{
+  "component": true,
+  "usingComponents": {
+    "mp-loadingstatus": "/component/loadingstatus/loadingstatus"
+  }
+}
\ No newline at end of file
diff --git a/pages/m_consult/base_c/c_result-item/c_result-item.wxml b/pages/m_consult/base_c/c_result-item/c_result-item.wxml
new file mode 100644
index 0000000..4d907fd
--- /dev/null
+++ b/pages/m_consult/base_c/c_result-item/c_result-item.wxml
@@ -0,0 +1,113 @@
+<import src="/template/nodata.wxml"></import>
+
+<view>
+  <block wx:if="{{results.length > 0}}">
+    <view wx:for="{{results}}" wx:key="index" data-index="{{index}}" data-type="{{item.typeId}}" bindtap="gotoDetail">
+      <block wx:if="{{item.typeId == 1}}">
+        <view class="fyui-box  fyui-box__text">
+          <view class="fyui-box__hd">
+            {{item.name}}
+          </view>
+          <view class="fyui-box__bd">
+            <view class="fyui-box__content tag">
+              <view>鏂囦欢绫诲埆锛歿{item.fileType}}</view>
+              <view>鐢熸晥鏃堕棿锛歿{item.effectiveDate}}</view>
+              <view wx:if="{{item.referenceNumber}}">鏂囧彿锛歿{item.referenceNumber}}</view>
+              <view>鐩稿叧琛屼笟 -> {{item.fileIndustry}}</view>
+            </view>
+            <view class="fyui-box__content des">{{item.des}}</view>
+          </view>
+          <view class="fyui-box__ft">
+            <text class="keyword">鍏抽敭璇嶏細</text>
+            <view class="keyword-item">
+              <text wx:for="{{item.keywords}}" wx:for-index="i" wx:for-item="word" wx:key="i">{{word}}</text>
+            </view>
+          </view>
+        </view>
+      </block>
+
+      <block wx:elif="{{item.typeId == 2}}">
+        <view class="fyui-box  fyui-box__text">
+          <view class="fyui-box__hd">
+            <rich-text nodes="{{item.des}}" class="fyui-box__content des subtitle"></rich-text>
+          </view>
+          <view class="fyui-box__bd">
+            <!-- <view class="fyui-box__content tag">鐩稿叧琛屼笟 -> {{item.fileIndustry}}</view> -->
+            <text class="tag2">鎵�灞炵珷鑺傦細{{item.chapterName}} {{item.name ? ' ' + item.name : ''}}</text>
+            <text class="tag2">鎵�灞炴枃浠讹細銆妠{item.fileName}}銆�</text>
+            <text class="tag2" wx:if="{{item.referenceNumber}}">鎵�灞炴枃鍙凤細{{item.referenceNumber}}</text>
+          </view>
+          <view class="fyui-box__ft_2">
+            <text class="tag3 {{item.effective? '' : 'tag3_disable'}}">{{item.effective ? '鐢熸晥涓�':'宸插け鏁�' }}</text>
+            <text class="tag3 {{item.relatedItems? '' : 'tag3_disable'}}">{{item.relatedItems ? '鍏宠仈鏉$洰' + item.relatedItems + '涓� >':'鏃犲叧鑱旀潯鐩�' }}</text>
+            <text class="tag3 {{item.relatedCases? '' : 'tag3_disable'}}">{{item.relatedCases ? '鍏宠仈妗堜緥' + item.relatedCases + '涓� >':'鏃犲叧鑱旀渚�' }}</text>
+          </view>
+        </view>
+      </block>
+
+      <block wx:elif="{{item.typeId == 3}}">
+        <view class="fyui-box fyui-box__text">
+          <view class="fyui-box__hd">
+            <text class="fyui-box__content des subtitle">{{item.name}}</text>
+          </view>
+          <view class="fyui-box__bd">
+            <view class="case-bd">
+              <rich-text class="tag2 des" nodes="{{item.des}}"></rich-text>
+              <image wx:if="{{item.imgUrl}}" src="{{item.imgUrl}}" mode="aspectFill"></image>
+            </view>
+          </view>
+          <view class="fyui-box__ft">
+            <text>妗堝彂鍦板潃锛歿{item.provinceName + item.cityName}}</text>
+            <text>妗堝彂鏃堕棿锛歿{item.occurDate}}</text>
+          </view>
+          <view class="fyui-box__ft_2">
+            <view style="white-space: nowrap;">娑夊強锛�</view>
+            <view class="case-tag-group">
+              <view class="case-tag" wx:if="{{item.punish}}">
+                <image src="/res/icons/cq_punish.png"></image>
+                <text>琛屾斂澶勭綒</text>
+              </view>
+              <view class="case-tag" wx:if="{{item.detained}}">
+                <image src="/res/icons/cq_detained.png"></image>
+                <text>琛屾斂鎷樼暀</text>
+              </view>
+              <view class="case-tag" wx:if="{{item.illegal}}">
+                <image src="/res/icons/cq_illegal.png"></image>
+                <text>鍒戜簨璐d换</text>
+              </view>
+              <view class="case-tag" wx:if="{{item.shotSpot}}">
+                <image src="/res/icons/cq_shotspot.png"></image>
+                <text>鐜繚鐑偣</text>
+              </view>
+              <view class="case-tag" wx:if="{{item.supervise}}">
+                <image src="/res/icons/cq_supervise.png"></image>
+                <text>鐫e療瑕佺偣</text>
+              </view>
+              <view class="case-tag" wx:if="{{item.minor}}">
+                <image src="/res/icons/cq_minor.png"></image>
+                <text>杞诲井杩濇硶</text>
+              </view>
+            </view>
+          </view>
+        </view>
+      </block>
+
+      <block wx:elif="{{item.typeId == 4}}">
+        <view class="fyui-box  fyui-box__text">
+          <view class="fyui-box__hd">
+            <text class="fyui-box__content des subtitle">{{item.name}}</text>
+          </view>
+          <view class="fyui-box__bd answer">
+            <view class="tag2">绛旓細</view>
+            <rich-text class="tag2 des" nodes="{{item.des}}"></rich-text>
+          </view>
+          <view class="fyui-box__ft">
+            <text>鎻愰棶鏃堕棿锛歿{item.time}}</text>
+            <text>鍥炲鏃堕棿锛歿{item.time}}</text>
+          </view>
+        </view>
+      </block>
+    </view>
+  </block>
+  <mp-loadingstatus loading="{{loading}}" needLoadMore="{{needLoadMore}}" nodata="{{results.length == 0}}"></mp-loadingstatus>
+</view>
\ No newline at end of file
diff --git a/pages/m_consult/base_c/c_result-item/c_result-item.wxss b/pages/m_consult/base_c/c_result-item/c_result-item.wxss
new file mode 100644
index 0000000..e8f6ab4
--- /dev/null
+++ b/pages/m_consult/base_c/c_result-item/c_result-item.wxss
@@ -0,0 +1,104 @@
+/* --fyui-box */
+.keyword {
+  white-space: nowrap;
+}
+.keyword-item {
+  display: flex;
+  justify-content: flex-start;
+  flex-wrap: wrap;
+}
+
+.keyword-item>text {
+  white-space: nowrap;
+  margin-right: 8px;
+  padding: 0px 6px;
+  color: #2c7064;
+}
+
+.des {
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 3;
+  width: 100%;
+  overflow: hidden;
+  /* text-overflow: ellipsis; */
+}
+
+.fyui-box__text .fyui-box__bd .tag {
+  margin-bottom: 8px;
+  font-size: 14px;
+}
+
+.fyui-box .answer {
+  display: flex;
+  flex-direction: row;
+  /* justify-content: space-between; */
+  /* background-color: red; */
+}
+
+.subtitle{
+  font-size: 15px;
+}
+
+.tag2{
+  line-height: 18px;
+  font-size: 12px;
+  color: var(--fyui-text-color_3);
+}
+
+.fyui-box__text .fyui-box__ft {
+  font-size: 12px;
+}
+
+.case-bd{
+  display: flex;
+}
+
+.case-bd>image{
+  width: 60%;
+  height: 54px;
+  border-radius: 4px;
+  margin-left: 4px;
+}
+
+.fyui-box__ft_2 {
+  display: flex;
+  font-size: 12px;
+  color: var(--fyui-text-color_3);
+  margin-top: 16px;
+}
+
+.case-tag-group {
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.case-tag {
+  display: flex;
+  align-items: center;
+}
+.case-tag>image {
+  width: 14px;
+  height: 14px;
+}
+
+.case-tag>text {
+  white-space: nowrap;
+  margin-left: 4px;
+  margin-right: 4px;
+}
+
+.tag3{
+  font-size: 10px;
+  background-color: var(--fyui-primary-color);
+  color: white;
+  border-radius: 2px;
+  padding: 2px 4px;
+  white-space: nowrap;
+  margin-right: 10px;
+}
+
+.tag3_disable{
+  background-color: var(--fyui-text-color_3);
+}
+
diff --git a/pages/m_consult/behaviors/b_elementTypes.js b/pages/m_consult/behaviors/b_elementTypes.js
new file mode 100644
index 0000000..75ec0f4
--- /dev/null
+++ b/pages/m_consult/behaviors/b_elementTypes.js
@@ -0,0 +1,151 @@
+const consultservice = require("../../../service/consultservice")
+const app = getApp()
+
+/**
+ * 鑾峰彇鐜繚瑕佺礌鍒嗙被
+ */
+module.exports = Behavior({
+  data: {
+    menus: [
+      { name: '澶ф皵', value: 1 },
+      { name: '姘�', value: 2 },
+      { name: '娴锋磱', value: 3 },
+      { name: '鍦熷¥', value: 4 },
+      { name: '鍣0', value: 5 },
+      { name: '鍏�', value: 6 },
+      { name: '杈愬皠', value: 7 },
+      { name: '鏍�', value: 8 },
+      { name: '鍥轰綋搴熺墿', value: 9 },
+      { name: '鍖栧鍝�', value: 10 },
+      { name: '鍙拌处', value: 21 },
+      { name: '鎵ф硶', value: 31 },
+      { name: '鐫e療', value: 41 },
+      { name: '鐩戞祴', value: 51 },
+      { name: '鏈嶅姟', value: 61 },
+      { name: '鍏朵粬', value: 99 }
+    ],
+    items: [
+      [
+        { name: 'PM', value: 1  },
+        { name: 'NOX', value: 2  },
+        { name: 'O3', value: 3  },
+        { name: 'VOCs', value: 4  },
+        { name: '宸ヤ笟搴熸皵', value: 5  },
+        { name: '鏈哄姩杞﹀熬姘�', value: 6  },
+        { name: '鎵皹', value: 7  },
+        { name: '椁愰ギ娌圭儫', value: 8  },
+        { name: '鎭惰嚟', value: 9  },
+        { name: '鍏朵粬', value: 99 },
+      ],
+      [
+        { name: '鍦拌〃姘�', value: 1  },
+        { name: '鍦颁笅姘�', value: 2  },
+        { name: '楗敤姘�', value: 3  },
+        { name: '宸ヤ笟搴熸按', value: 4  },
+        { name: '鐢熸椿姹℃按', value: 5  },
+        { name: '鍟嗕笟姹℃按', value: 6  },
+        { name: '鍏朵粬', value: 99  },
+      ],
+      [
+        { name: '鐭虫补鍙婂叾浜у搧', value: 1  },
+        { name: '閲嶉噾灞炲拰閰哥⒈', value: 2  },
+        { name: '鍐滆嵂', value: 3  },
+        { name: '鏈夋満鐗╄川鍜岃惀鍏荤洂绫�', value: 4  },
+        { name: '鏀惧皠鎬ф牳绱�', value: 5  },
+        { name: '鍥轰綋搴熺墿', value: 6  },
+        { name: '搴熺儹', value: 7  },
+        { name: '鍏朵粬', value: 99  },
+      ],
+      [
+        { name: '鍐滅敯鑰曞湴', value: 1  },
+        { name: '宸ヤ笟浼佷笟鐢ㄥ湴', value: 2  },
+        { name: '鐭虫补寮�閲囩敤鍦�', value: 3  },
+        { name: '鐭垮北寮�閲囩敤鍦�', value: 4  },
+        { name: '鍏朵粬', value: 99  },
+      ],
+      [
+        { name: '宸ヤ笟鐢熶骇鍣0', value: 1  },
+        { name: '浜ら�氳繍杈撳櫔澹�', value: 2  },
+        { name: '寤虹瓚鏂藉伐鍣0', value: 3  },
+        { name: '绀句細鐢熸椿鍣0', value: 4  },
+        { name: '鍏朵粬', value: 99  },
+      ],
+      [
+        { name: '鐧戒寒姹℃煋', value: 1  },
+        { name: '浜哄伐鐧芥樇姹℃煋', value: 2  },
+        { name: '褰╁厜姹℃煋', value: 3  },
+        { name: '鍏朵粬', value: 99  },
+      ],
+      [
+        { name: '鐢电杈愬皠', value: 1  },
+        { name: '鏀惧皠鎬ц緪灏�', value: 2  },
+        { name: '鍏朵粬', value: 99  },
+      ],
+      [],
+      [],
+      [],
+      [],
+      [],
+      [],
+      [],
+      [],
+    ],
+  },
+  methods: {
+    /**
+     * 瑕佺礌澶х被
+     */
+    getEnElementTypes() {
+      var that = this
+      consultservice.getEnElementTypes(app.globalData.accessToken.userId, {
+        success(res) {
+          const menus = [{
+            name: '鍏ㄩ儴',
+            value: null,
+          }]
+          res.forEach(r => {
+            menus.push({
+              name: r.first,
+              value: r.second,
+            })
+          });
+          that.setData({menus})
+        }
+      })
+    },
+  
+    /**
+     * 瑕佺礌瀛愮被
+     */
+    getEnElementSubTypes() {
+      var that = this
+      consultservice.getEnElementSubTypes(app.globalData.accessToken.userId, {
+        success(res) {
+          const items = [
+            [{
+              name: '鍏ㄩ儴',
+              value: null,
+            }]
+          ]
+          res.forEach(r => {
+            const l = []
+            r.forEach(s => {
+              l.push({
+                name: s.first,
+                value: s.second,  
+              })
+            });
+            items.push(l)
+          });
+          that.setData({items})
+        }
+      })
+    },
+  },
+  lifetimes: {
+    attached: function() {
+      this.getEnElementTypes()
+      this.getEnElementSubTypes()
+    }
+  }
+})
\ No newline at end of file
diff --git a/pages/m_consult/behaviors/b_questions.js b/pages/m_consult/behaviors/b_questions.js
new file mode 100644
index 0000000..3dafcf9
--- /dev/null
+++ b/pages/m_consult/behaviors/b_questions.js
@@ -0,0 +1,59 @@
+const b_loadingStatus = require("../../../base/behaviors/b_loadingStatus")
+const consultservice = require("../../../service/consultservice")
+const util = require("../../../utils/util")
+const app = getApp()
+
+/**
+ * 閫氳繃鍒嗙被鑾峰彇闂
+ */
+module.exports = Behavior({
+  behaviors: [b_loadingStatus],
+  data: {
+    //鎼滅储缁撴灉
+    questions: [],
+  },
+  methods: {
+    loadmore(cPage) {
+      this.getQuestionsByType(++cPage, this.selectedValues)
+    },
+    /**
+     * 鏍规嵁瑕佺礌绫诲瀷鑾峰彇瀵瑰簲鐨勯棶棰�
+     * @see "./b_element-types.js"
+     * @param page 鍒嗛〉
+     * @param selectedValues [i, j]锛岄�変腑鐨勫垎绫荤紪鍙穒鍜屽瓙绫荤紪鍙穓锛宨銆乯涓簄ull琛ㄧず鍏ㄩ儴
+     */
+    getQuestionsByType(page = 1, selectedValues) {
+      this.selectedValues = selectedValues
+      this.setData({loading: true})
+      const t = setTimeout(() => {
+        this.setData({loading: false})
+      }, 10000);
+      var that = this
+      consultservice.getQuestionsByType(app.globalData.accessToken.userId, selectedValues[0], selectedValues[1], page, app.globalData.perPage, {
+          onPage(head) {
+            that.setData({
+              cPage: head.page,
+              tPage: head.totalPage,
+              totalCount: head.totalCount
+            })
+          },
+          success(res) {
+            res.forEach(r => {
+              r.time = util.formatTime(r.time)
+              r.des = r.des.replaceAll('\\n', '<br/>')
+            });
+            let questions = that.data.questions
+            if (page == 1) {
+              questions = []
+            }
+            questions = questions.concat(res)
+            that.setData({questions})
+          },
+          complete(e) {
+            that.setData({loading: false})
+            clearTimeout(t)
+          }
+        })
+    },
+  }
+})
\ No newline at end of file
diff --git a/pages/m_consult/behaviors/b_search.js b/pages/m_consult/behaviors/b_search.js
new file mode 100644
index 0000000..5a247bd
--- /dev/null
+++ b/pages/m_consult/behaviors/b_search.js
@@ -0,0 +1,52 @@
+const b_loadingStatus = require("../../../base/behaviors/b_loadingStatus")
+const consultservice = require("../../../service/consultservice")
+const app = getApp()
+
+/**
+ * 鏅鸿兘鍦ㄧ嚎鍜ㄨ鐨勬悳绱㈤�昏緫
+ */
+module.exports = Behavior({
+  behaviors: [b_loadingStatus],
+  data: {
+    //鎼滅储缁撴灉
+    results: []
+  },
+  methods: {
+    loadmore(cPage) {
+      this.search(this.obj, ++cPage)
+    },
+    /**
+     * 鏍规嵁鍏抽敭瀛楀強鏌ヨ绫诲瀷鎼滅储
+     * @param keyword 鍏抽敭瀛楋紝鑻ュ叧閿瓧涓虹┖鐧斤紝鍒欐寜鐓х儹闂ㄧ殑閫昏緫鎼滅储
+     * @param type 鏌ヨ绫诲瀷锛屽寘鎷琜1锛氭硶瑙勬枃浠讹紝2锛氭硶瑙勬潯鐩紝3锛氭墽娉曟渚嬶紝4锛氱幆淇濋棶棰榏锛屼笉濉啓鏃惰〃绀烘煡璇㈡墍鏈夌被鍨嬬殑鍓�5鏉�
+     */
+    search(obj, cPage = 1) {
+      this.obj = obj
+      this.setData({loading: true})
+      const t = setTimeout(() => { this.setData({loading: false}) }, 10000);
+      var that = this
+      const {keyword, type} = obj
+      consultservice.searchLaw(app.globalData.accessToken.userId, keyword, cPage, app.globalData.perPage, {
+        onPage(head) {
+          that.setData({
+            cPage: head.page,
+            tPage: head.totalPage,
+          })
+        },
+        success(res) {
+          let results = that.data.results
+          //褰撳垎椤典负绗竴椤垫椂锛屼唬琛ㄦ暟鎹叏閮ㄥ埛鏂帮紝鍒犲幓涓婁竴娆¤幏鍙栫殑璁板綍锛屽惁鍒欎负鑾峰彇鏇村鏁版嵁锛屼繚鐣欏墠涓�娆¤幏鍙栫殑璁板綍
+          if (that.data.cPage == 1) results = []
+          results = results.concat(res)
+          that.setData({
+            results
+          })
+        },
+        complete() {
+          that.setData({loading: false})
+          clearTimeout(t)
+        }
+      }, type)
+    },
+  }
+})
\ No newline at end of file
diff --git a/pages/m_consult/c_result-item-search/c_result-item-search.js b/pages/m_consult/c_result-item-search/c_result-item-search.js
new file mode 100644
index 0000000..e4a710b
--- /dev/null
+++ b/pages/m_consult/c_result-item-search/c_result-item-search.js
@@ -0,0 +1,58 @@
+const b_search = require("../behaviors/b_search")
+
+/**
+ * 鏅鸿兘鍜ㄨ鏌ヨ缁撴灉鍒楄〃缁勪欢
+ */
+
+Component({
+  behaviors: [b_search],
+  /**
+   * 缁勪欢鐨勫睘鎬у垪琛�
+   */
+  properties: {
+    //鏌ヨ鏉′欢
+    keyobj: {
+      type: Object,
+      value: {
+        keyword: '',
+        type: undefined
+      },
+    },
+    reachBottom: {
+      type: Boolean,
+      value: false
+    }
+  },
+
+  observers: {
+    'keyobj': function(keyobj) {
+      this.search(keyobj)
+    },
+    // 'reachBottom': function(reachBottom) {
+    //   if (reachBottom) {
+    //     this._onReachBottom()
+    //   }
+    // }
+  },
+
+  /**
+   * 缁勪欢鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    
+  },
+
+  /**
+   * 缁勪欢鐨勬柟娉曞垪琛�
+   */
+  methods: {
+    // _onReachBottom() {
+    //   console.log('_onReachBottom');
+    //   let {cPage, tPage} = this.data
+    //   console.log(this.data);
+    //   if (cPage < tPage) {
+    //     this.search(this.data.keyobj, ++cPage)
+    //   }
+    // }
+  }
+})
\ No newline at end of file
diff --git a/pages/m_consult/c_result-item-search/c_result-item-search.json b/pages/m_consult/c_result-item-search/c_result-item-search.json
new file mode 100644
index 0000000..f17300e
--- /dev/null
+++ b/pages/m_consult/c_result-item-search/c_result-item-search.json
@@ -0,0 +1,6 @@
+{
+  "component": true,
+  "usingComponents": {
+    "c-result-item": "../base_c/c_result-item/c_result-item"
+  }
+}
\ No newline at end of file
diff --git a/pages/m_consult/c_result-item-search/c_result-item-search.wxml b/pages/m_consult/c_result-item-search/c_result-item-search.wxml
new file mode 100644
index 0000000..a05d9e2
--- /dev/null
+++ b/pages/m_consult/c_result-item-search/c_result-item-search.wxml
@@ -0,0 +1 @@
+<c-result-item results="{{results}}" loading="{{loading}}" needLoadMore="{{needLoadMore}}"></c-result-item>
\ No newline at end of file
diff --git a/pages/m_consult/c_result-item-search/c_result-item-search.wxss b/pages/m_consult/c_result-item-search/c_result-item-search.wxss
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/pages/m_consult/c_result-item-search/c_result-item-search.wxss
diff --git a/pages/m_consult/consultdetail/consultdetail.js b/pages/m_consult/consultdetail/consultdetail.js
index c46b5c1..29a2a7d 100644
--- a/pages/m_consult/consultdetail/consultdetail.js
+++ b/pages/m_consult/consultdetail/consultdetail.js
@@ -9,7 +9,7 @@
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
   data: {
-    fileId: 'Zi5EEhijAKugYeHe',
+    id: 'Zi5EEhijAKugYeHe',
     content: {}
   },
 
@@ -20,7 +20,7 @@
     var that = this
     this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function (data) {
       that.setData({
-        fileId: data.fileId
+        id: data.id
       })
 
       that.getFile()
@@ -54,7 +54,7 @@
     setTimeout(() => {
       wx.hideLoading()
     }, 20000);
-    consultservice.getMgtFile(app.globalData.accessToken.userId, this.data.fileId, {
+    consultservice.getMgtFile(app.globalData.accessToken.userId, this.data.id, {
       success (res) {
         res.mfReleaseDate = that.formateTime(res.mfReleaseDate)
         res.mfEffectiveDate = that.formateTime(res.mfEffectiveDate)
diff --git a/pages/m_consult/consultdetailcase/consultdetailcase.js b/pages/m_consult/consultdetailcase/consultdetailcase.js
index 13427e2..01f06d9 100644
--- a/pages/m_consult/consultdetailcase/consultdetailcase.js
+++ b/pages/m_consult/consultdetailcase/consultdetailcase.js
@@ -26,7 +26,7 @@
     var that = this
     this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function (data) {
       that.setData({
-        caseId: data.caseId
+        id: data.id
       })
       that.getCase()
     })
@@ -37,7 +37,7 @@
       showloading: true
     })
     var that = this
-    consultservice.getCase(app.globalData.accessToken.userId, this.data.caseId, {
+    consultservice.getCase(app.globalData.accessToken.userId, this.data.id, {
       success(res) {
         let caseTag = []
         if (res.ecIsPunish) caseTag.push({icon: '/res/icons/cq_punish.png', name: '娑夊強琛屾斂澶勭綒'})
diff --git a/pages/m_consult/consultdetailitem/consultdetailitem.js b/pages/m_consult/consultdetailitem/consultdetailitem.js
index e0537c3..78773dc 100644
--- a/pages/m_consult/consultdetailitem/consultdetailitem.js
+++ b/pages/m_consult/consultdetailitem/consultdetailitem.js
@@ -20,7 +20,7 @@
     var that = this
     this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function (data) {
       that.setData({
-        itemId: data.itemId
+        id: data.id
       })
 
       that.getItem()
@@ -90,7 +90,7 @@
     setTimeout(() => {
       wx.hideLoading()
     }, 20000);
-    consultservice.getMgtItem(app.globalData.accessToken.userId, this.data.itemId, {
+    consultservice.getMgtItem(app.globalData.accessToken.userId, this.data.id, {
       success (res) {
         res.miItemContent = res.miItemContent.replaceAll('\\n', '<br/>')
         that.setData({
diff --git a/pages/m_consult/consultdetailqa/consultdetailqa.js b/pages/m_consult/consultdetailqa/consultdetailqa.js
index ebd1704..42840fc 100644
--- a/pages/m_consult/consultdetailqa/consultdetailqa.js
+++ b/pages/m_consult/consultdetailqa/consultdetailqa.js
@@ -33,7 +33,7 @@
     var that = this
     this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function (data) {
       that.setData({
-        qId: data.qId
+        id: data.id
       })
 
       that.getQuestion()
@@ -46,7 +46,7 @@
       showloading: true
     })
     var that = this
-    consultservice.getQuestion(app.globalData.accessToken.userId, this.data.qId, {
+    consultservice.getQuestion(app.globalData.accessToken.userId, this.data.id, {
       success(res) {
         let questionTag = []
         if (res.cqIsPunish) questionTag.push({icon: '/res/icons/cq_punish.png', name: '娑夊強琛屾斂澶勭綒'})
@@ -72,7 +72,7 @@
       showloading: true
     })
     var that = this
-    consultservice.getAnswers(app.globalData.accessToken.userId, this.data.qId, {
+    consultservice.getAnswers(app.globalData.accessToken.userId, this.data.id, {
       success(res) {
         res.forEach(r => {
           r.saContent = r.saContent.replaceAll('\\n', '<br/>')
diff --git a/pages/m_consult/consulthome/consulthome.js b/pages/m_consult/consulthome/consulthome.js
index 471e6c8..19523e2 100644
--- a/pages/m_consult/consulthome/consulthome.js
+++ b/pages/m_consult/consulthome/consulthome.js
@@ -1,25 +1,14 @@
 // pages/m_consult/consulthome/consulthome.js
-const consultservice = require("../../../service/consultservice")
-const moment = require('../../../utils/moment.min')
-const app = getApp()
 
 Page({
-
+  // behaviors: [behavior],
   /**
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
   data: {
     searchTips: '璇疯緭鍏ュ叧閿瓧鎼滅储',
-    hotTopics: [],
-
     tabList: [{
       name: '鐑棬',
-      tag: 0
-    }, {
-      name: '鏂囦欢',
-      tag: 0
-    }, {
-      name: '鏉$洰',
       tag: 0
     }, {
       name: '闂瓟',
@@ -27,39 +16,35 @@
     }, {
       name: '妗堜緥',
       tag: 0
-    }],
-
-    pageList: [
-      [],
-      [],
-      [],
-      [],
-      [],
-    ],
-
-    //妗堜緥鎵�娑夊強鐨勮鐐�
-    caseTag: []
+    }, {
+      name: '鏉$洰',
+      tag: 0
+    }, {
+      name: '鏂囦欢',
+      tag: 0
+    }, ],
+    refresh: false,
+    // 鐑棬鍐呭鏌ヨ鏉′欢
+    keyAll: {keyword: '', type: undefined},
+    key1: {keyword: '', type: 1},
+    key2: {keyword: '', type: 2},
+    key3: {keyword: '', type: 3},
+    key4: {keyword: '', type: 4},
+    reachBottom: [false, false, false, false, false],
+    tabIndex: 0
   },
 
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
    */
   onLoad: function (options) {
-    this.getHotTopic()
+    // this.getHotTopic()
   },
 
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
-   */
-  onReady: function () {
-
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
-   */
-  onShow: function () {
-
+  onReachBottom() {
+    let reachBottom = [false, false, false, false, false]
+    reachBottom[this.data.tabIndex] = true
+    this.setData({reachBottom})
   },
 
   // 鎼滅储
@@ -98,140 +83,19 @@
     }
   },
 
-  /**
-   * 鑾峰彇鐑棬鎼滅储鍐呭
-   */
-  getHotTopic() {
-    var that = this
-    // 1. 鐑棬娉曞緥娉曡
-    consultservice.getTopicLaw(app.globalData.accessToken.userId, {
-      success(res) {
-        res.forEach(r => {
-          r.mfKeywordLv1 = r.mfKeywordLv1.split('銆�').slice(0, 5)
-          r.mfReleaseDate = that.formatTime(r.mfReleaseDate)
-          r.mfEffectiveDate = that.formatTime(r.mfEffectiveDate)
-          r.mfClosingDate = that.formatTime(r.mfClosingDate)
-        });
-        that.setData({
-          'pageList[0]': res,
-          'pageList[1]': res
-        })
-      }
+  loadingDone(e){
+    this.setData({
+      refresh: false
     })
-    // 2. 鐑棬娉曞緥娉曡鏉$洰
-    consultservice.getTopicItem(app.globalData.accessToken.userId, {
-      success(res) {
-        res.forEach(r => {
-          r.miItemContent = r.miItemContent.replaceAll('\\n', '<br/>')
-        });
-        that.setData({
-          'pageList[2]': res
-        })
-      }
-    })
-    // 3. 鐑棬闂瓟
-    consultservice.getTopicQA(app.globalData.accessToken.userId, {
-      success(res) {
-        res.forEach(r => {
-          r.cqCreateTime = that.formatTime(r.cqCreateTime)
-        });
-        that.setData({
-          'pageList[3]': res
-        })
-      }
-    })
-    // 4. 鐑棬妗堜緥
-    consultservice.getTopicCase(app.globalData.accessToken.userId, {
-      success(res) {
-        res.forEach(r => {
-          r.ecSummary = r.ecSummary.replaceAll('\\n', '<br/>')
-          r.ecMeaning = r.ecMeaning.replaceAll('\\n', '<br/>')
-          r.ecExamined = r.ecExamined.replaceAll('\\n', '<br/>')
-          r.ecEnlightenment = r.ecEnlightenment.replaceAll('\\n', '<br/>')
-          r.ecOccurDate = that.formatTime(r.ecOccurDate)
-        });
-        that.setData({
-          'pageList[4]': res
-        })
-        console.log(that.data.pageList);
-      }
+    this.setData({
+      refresh: true
     })
   },
 
-
-  // 鍘诲線鏂囦欢璇︽儏
-  gotoFile(e) {
-    const iList = e.currentTarget.dataset.index.split(',')
-    const i1 = iList[0]
-    const i2 = iList[1]
-    var fileId = this.data.pageList[i1][i2].mfGuid
-    wx.navigateTo({
-      url: '/pages/m_consult/consultdetail/consultdetail',
-      success: (res) => {
-        // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
-        res.eventChannel.emit('acceptDataFromOpenerPage', {
-          fileId: fileId
-        })
-      },
+  onTabChange(e) {
+    console.log(e.detail);
+    this.setData({
+      tabIndex: e.detail
     })
-  },
-
-  // 鍘诲線鏉$洰璇︽儏
-  gotoItem(e) {
-    const iList = e.currentTarget.dataset.index.split(',')
-    const i1 = iList[0]
-    const i2 = iList[1]
-    var itemId = this.data.pageList[i1][i2].miGuid
-    wx.navigateTo({
-      url: '/pages/m_consult/consultdetailitem/consultdetailitem',
-      success: (res) => {
-        // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
-        res.eventChannel.emit('acceptDataFromOpenerPage', {
-          itemId: itemId
-        })
-      },
-    })
-  },
-
-  // 鍘诲線闂瓟璇︽儏
-  gotoQA(e) {
-    const iList = e.currentTarget.dataset.index.split(',')
-    const i1 = iList[0]
-    const i2 = iList[1]
-    var qId = this.data.pageList[i1][i2].cqGuid
-    wx.navigateTo({
-      url: '/pages/m_consult/consultdetailqa/consultdetailqa',
-      success: (res) => {
-        // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
-        res.eventChannel.emit('acceptDataFromOpenerPage', {
-          qId: qId
-        })
-      },
-    })
-  },
-
-  // 鍘诲線妗堜緥璇︽儏
-  gotoCase(e) {
-    const iList = e.currentTarget.dataset.index.split(',')
-    const i1 = iList[0]
-    const i2 = iList[1]
-    var caseId = this.data.pageList[i1][i2].ecGuid
-    wx.navigateTo({
-      url: '/pages/m_consult/consultdetailcase/consultdetailcase',
-      success: (res) => {
-        // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
-        res.eventChannel.emit('acceptDataFromOpenerPage', {
-          caseId: caseId
-        })
-      },
-    })
-  },
-
-  formatTime(t) {
-    if (t) {
-      return moment(t).format("YYYY.MM.DD")
-    } else {
-      return undefined
-    }
-  },
+  }
 })
\ No newline at end of file
diff --git a/pages/m_consult/consulthome/consulthome.json b/pages/m_consult/consulthome/consulthome.json
index b732a06..00ede65 100644
--- a/pages/m_consult/consulthome/consulthome.json
+++ b/pages/m_consult/consulthome/consulthome.json
@@ -5,6 +5,7 @@
   "usingComponents": {
     "mp-icon": "/component/icon/icon",
     "switch-tab": "/component/switchtab/switchtab",
-    "mp-loading": "/component/loading/loading"
+    "mp-loading": "/component/loading/loading",
+    "c-result-item-search": "../c_result-item-search/c_result-item-search"
   }
 }
\ No newline at end of file
diff --git a/pages/m_consult/consulthome/consulthome.wxml b/pages/m_consult/consulthome/consulthome.wxml
index b53ee34..1f99a33 100644
--- a/pages/m_consult/consulthome/consulthome.wxml
+++ b/pages/m_consult/consulthome/consulthome.wxml
@@ -5,8 +5,6 @@
       <mp-icon icon="search" size="15" color="black"></mp-icon>
       <text>{{searchTips}}</text>
     </view>
-  </view>
-  <view class="page__bd">
     <view class="flex-h">
       <view class="card" bindtap="goto" data-index="0">
         <image src="/res/icons/con_pro_bg.png" class="card-bg" mode="scaleToFill" />
@@ -29,145 +27,15 @@
         <image src="/res/icons/con_qa.png" mode="aspectFit" class="icon"></image>
       </view>
     </view>
-
-
-    <switch-tab tabList="{{tabList}}" pageList="{{pageList}}">
-      <view slot="slot{{i1}}" wx:for="{{pageList}}" wx:for-item="page" wx:key="i1" wx:for-index="i1">
-        <block wx:if="{{page.length > 0}}">
-
-          <block wx:if="{{i1 == 0 || i1 == 1}}">
-            <view wx:for="{{page}}" wx:key="i2" wx:for-index="i2" data-index="{{i1}},{{i2}}" bindtap="gotoFile">
-              <view class="fyui-box  fyui-box__text">
-                <view class="fyui-box__hd">
-                  {{item.mfName}}
-                </view>
-                <view class="fyui-box__bd">
-                  <view class="fyui-box__content tag">
-                    <view>鏂囦欢绫诲埆锛歿{item.mfFileType}}</view>
-                    <view>鐢熸晥鏃堕棿锛歿{item.mfEffectiveDate}}</view>
-                    <view>鏂囧彿锛歿{item.mfReferenceNumber}}</view>
-                    <view>鐩稿叧琛屼笟 -> {{item.mfFileIndustry}}</view>
-                  </view>
-                  <view class="fyui-box__content des">{{item.mfSummary}}</view>
-                </view>
-                <view class="fyui-box__ft">
-                  <text class="keyword">鍏抽敭璇嶏細</text>
-                  <view class="keyword-item">
-                    <text wx:for="{{item.mfKeywordLv1}}" wx:for-index="i" wx:for-item="word" wx:key="i">{{word}}</text>
-                  </view>
-                </view>
-              </view>
-            </view>
-          </block>
-
-          <block wx:elif="{{i1 == 2}}">
-            <view wx:for="{{page}}" wx:key="i2" wx:for-index="i2" data-index="{{i1}},{{i2}}" bindtap="gotoItem">
-              <view class="fyui-box  fyui-box__text">
-                <view class="fyui-box__hd">
-                  <rich-text nodes="{{item.miItemContent}}" class="fyui-box__content des subtitle"></rich-text>
-                </view>
-                <view class="fyui-box__bd">
-                  <!-- <view class="fyui-box__content tag">鐩稿叧琛屼笟 -> {{item.fileIndustry}}</view> -->
-                  <text class="tag2">鎵�灞炵珷鑺傦細{{item.miChapterName}} {{item.miItemName ? ' ' + item.miItemName : ''}}</text>
-                  <text class="tag2">鎵�灞炴枃浠讹細銆妠{item.mfName}}銆�</text>
-                  <text class="tag2" wx:if="{{item.miReferenceNumber}}">鎵�灞炴枃鍙凤細{{item.miReferenceNumber}}</text>
-                </view>
-                <view class="fyui-box__ft">
-                  <!-- <text class="tag3 {{item.effective? '' : 'tag3_disable'}}">{{item.effective ? '鐢熸晥涓�':'宸插け鏁�' }}</text>
-                  <text class="tag3 {{item.relatedItems? '' : 'tag3_disable'}}">{{item.relatedItems ? '鍏宠仈鏉$洰' + item.relatedItems + '涓� >':'鏃犲叧鑱旀潯鐩�' }}</text>
-                  <text class="tag3 {{item.relatedCases? '' : 'tag3_disable'}}">{{item.relatedCases ? '鍏宠仈妗堜緥' + item.relatedCases + '涓� >':'鏃犲叧鑱旀渚�' }}</text> -->
-                  <!-- <text class="keyword">鍏抽敭璇嶏細</text>
-                <view class="keyword-item"><text wx:for="{{item.keywords}}" wx:for-index="i" wx:for-item="word" wx:key="i">{{word}}</text></view> -->
-                </view>
-              </view>
-            </view>
-          </block>
-
-          <block wx:elif="{{i1 == 3}}">
-            <view wx:for="{{page}}" wx:key="i2" wx:for-index="i2" data-index="{{i1}},{{i2}}" bindtap="gotoQA">
-              <view class="fyui-box  fyui-box__text">
-                <view class="fyui-box__hd">
-                  <text class="fyui-box__content des subtitle">{{item.cqContent}}</text>
-                </view>
-                <view class="fyui-box__bd answer">
-                  <!-- <view class="fyui-box__content tag">鐩稿叧琛屼笟 -> {{item.fileIndustry}}</view> -->
-                  <view class="tag2">绛旓細</view>
-                  <rich-text class="tag2 des" nodes="{{item.answer}}"></rich-text>
-                </view>
-                <view class="fyui-box__ft">
-                  <text class="tag3">鎻愰棶鏃堕棿锛歿{item.cqCreateTime}}</text>
-                  <text class="tag3">鍥炲鏃堕棿锛歿{item.cqCreateTime}}</text>
-                  <!-- <text class="keyword">鍏抽敭璇嶏細</text>
-                <view class="keyword-item"><text wx:for="{{item.keywords}}" wx:for-index="i" wx:for-item="word" wx:key="i">{{word}}</text></view> -->
-                </view>
-              </view>
-            </view>
-          </block>
-
-          <block wx:elif="{{i1 == 4}}">
-            <view wx:for="{{page}}" wx:key="i2" wx:for-index="i2" data-index="{{i1}},{{i2}}" bindtap="gotoCase">
-              <view class="fyui-box fyui-box__text">
-                <view class="fyui-box__hd">
-                  <text class="fyui-box__content des subtitle">{{item.ecTitle}}</text>
-                </view>
-                <view class="fyui-box__bd">
-                  <view class="case-bd">
-                    <rich-text class="tag2 des" nodes="{{item.ecSummary}}"></rich-text>
-                    <image wx:if="{{item.ecAppendixUrl.length > 0}}" src="{{item.ecAppendixUrl[0]}}" mode="aspectFill"></image>
-                  </view>
-                </view>
-                <view class="fyui-box__ft">
-                  <text class="tag3">妗堝彂鍦板潃锛歿{item.ecProvinceName + item.ecCityName}}</text>
-                  <text class="tag3">妗堝彂鏃堕棿锛歿{item.ecOccurDate}}</text>
-                </view>
-                <view class="fyui-box__ft_2">
-                  <view style="white-space: nowrap;">娑夊強锛�</view>
-                  <view class="case-tag-group">
-                    <view class="case-tag" wx:if="{{item.ecIsPunish}}">
-                      <image src="/res/icons/cq_punish.png"></image>
-                      <text>琛屾斂澶勭綒</text>
-                    </view>
-                    <view class="case-tag" wx:if="{{item.ecIsDetained}}">
-                      <image src="/res/icons/cq_detained.png"></image>
-                      <text>琛屾斂鎷樼暀</text>
-                    </view>
-                    <view class="case-tag" wx:if="{{item.ecIsIllegal}}">
-                      <image src="/res/icons/cq_illegal.png"></image>
-                      <text>鍒戜簨璐d换</text>
-                    </view>
-                    <view class="case-tag" wx:if="{{item.ecIsShotspot}}">
-                      <image src="/res/icons/cq_shotspot.png"></image>
-                      <text>鐜繚鐑偣</text>
-                    </view>
-                    <view class="case-tag" wx:if="{{item.ecIsSupervise}}">
-                      <image src="/res/icons/cq_supervise.png"></image>
-                      <text>鐫e療瑕佺偣</text>
-                    </view>
-                    <view class="case-tag" wx:if="{{item.ecIsMinor}}">
-                      <image src="/res/icons/cq_minor.png"></image>
-                      <text>杞诲井杩濇硶</text>
-                    </view>
-                  </view>
-                </view>
-              </view>
-            </view>
-          </block>
-        </block>
-
-        <view wx:else class="page__ft">
-          <mp-loading duration="{{900}}" type="dot-gray" show="{{true}}" animated="{{true}}"></mp-loading>
-        </view>
-      </view>
+  </view>
+  <view class="page__bd">
+    <switch-tab tabList="{{tabList}}" refresh="{{refresh}}" bindtabchange="onTabChange">
+      <c-result-item-search slot="slot0" reachBottom="{{reachBottom[0]}}" keyobj="{{keyAll}}" data-index="0" bindloadComplete="loadingDone"></c-result-item-search>
+      <c-result-item-search slot="slot1" reachBottom="{{reachBottom[1]}}" keyobj="{{key4}}" data-index="1" bindloadComplete="loadingDone"></c-result-item-search>
+      <c-result-item-search slot="slot2" reachBottom="{{reachBottom[2]}}" keyobj="{{key3}}" data-index="2" bindloadComplete="loadingDone"></c-result-item-search>
+      <c-result-item-search slot="slot3" reachBottom="{{reachBottom[3]}}" keyobj="{{key2}}" data-index="3" bindloadComplete="loadingDone"></c-result-item-search>
+      <c-result-item-search slot="slot4" reachBottom="{{reachBottom[4]}}" keyobj="{{key1}}" data-index="4" bindloadComplete="loadingDone"></c-result-item-search>
     </switch-tab>
-
-
-    <!-- <view class="fyui-cell fyui-cell_select">
-      <view class="fyui-cell__bd">鐑棬</view>
-      <view class="fyui-cell__ft">鏇村</view>
-    </view> -->
-
   </view>
-  <view class="page__ft">
-
-  </view>
+  <view class="page__ft"></view>
 </view>
\ No newline at end of file
diff --git a/pages/m_consult/consulthome/consulthome.wxss b/pages/m_consult/consulthome/consulthome.wxss
index 10bae57..0f2b220 100644
--- a/pages/m_consult/consulthome/consulthome.wxss
+++ b/pages/m_consult/consulthome/consulthome.wxss
@@ -1,6 +1,6 @@
 /* pages/m_consult/consulthome/consulthome.wxss */
 .page__bd {
-  padding: 10px;
+  /* padding: 10px; */
 }
 
 .search-bar {
@@ -12,6 +12,7 @@
   text-align: left;
   background-color: white;
   border-radius: 10px;
+  margin-bottom: 8px;
 }
 
 .card {
@@ -50,99 +51,4 @@
 .card .icon {
   height: 56px;
   width: 60px;
-}
-
-
-/* --fyui-box */
-.fyui-box__tag {
-  justify-content: space-evenly;
-}
-
-.keyword {
-  white-space: nowrap;
-}
-.keyword-item {
-  display: flex;
-  justify-content: flex-start;
-  flex-wrap: wrap;
-}
-
-.keyword-item>text {
-  white-space: nowrap;
-  margin-right: 8px;
-  padding: 0px 6px;
-  color: #2c7064;
-}
-
-.des {
-  display: -webkit-box;
-  -webkit-box-orient: vertical;
-  -webkit-line-clamp: 3;
-  width: 100%;
-  overflow: hidden;
-  /* text-overflow: ellipsis; */
-}
-
-.fyui-box__text .fyui-box__bd .tag {
-  margin-bottom: 8px;
-  font-size: 14px;
-}
-
-.fyui-box .answer {
-  display: flex;
-  flex-direction: row;
-  /* justify-content: space-between; */
-  /* background-color: red; */
-}
-
-.subtitle{
-  font-size: 15px;
-}
-
-.tag2{
-  line-height: 18px;
-  font-size: 12px;
-  color: var(--fyui-text-color_3);
-}
-
-.fyui-box__text .fyui-box__ft {
-  font-size: 12px;
-}
-
-.case-bd{
-  display: flex;
-}
-
-.case-bd>image{
-  width: 60%;
-  height: 54px;
-  border-radius: 4px;
-  margin-left: 4px;
-}
-
-.fyui-box__ft_2 {
-  display: flex;
-  font-size: 12px;
-  color: var(--fyui-text-color_3);
-  margin-top: 16px;
-}
-
-.case-tag-group {
-  display: flex;
-  flex-wrap: wrap;
-}
-
-.case-tag {
-  display: flex;
-  align-items: center;
-}
-.case-tag>image {
-  width: 14px;
-  height: 14px;
-}
-
-.case-tag>text {
-  white-space: nowrap;
-  margin-left: 4px;
-  margin-right: 4px;
 }
\ No newline at end of file
diff --git a/pages/m_consult/consultonline/consultonline.js b/pages/m_consult/consultonline/consultonline.js
index 9d994c1..bed0497 100644
--- a/pages/m_consult/consultonline/consultonline.js
+++ b/pages/m_consult/consultonline/consultonline.js
@@ -1,8 +1,9 @@
 // pages/m_consult/consultonline/consultonline.js
+const b_search = require("../behaviors/b_search")
 const app = getApp()
 
 Page({
-
+  behaviors: [b_search],
   /**
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
@@ -13,6 +14,7 @@
         time: '',
         userId: 'system',
         userName: '鏅鸿兘瀹㈡湇',
+        type: 0,
         text: '鐢ㄦ埛鎮ㄥソ锛屽緢楂樺叴涓轰綘鏈嶅姟',
       },
       {
@@ -20,6 +22,7 @@
         time: '',
         userId: 'system',
         userName: '鏅鸿兘瀹㈡湇',
+        type: 0,
         text: '鐢ㄦ埛鎮ㄥソ锛屽緢楂樺叴涓烘偍鏈嶅姟锛屾湰鏈堜俊鐢ㄨ嚜璇勭粨鏋滆緝 濂斤紝缁х画淇濇寔鍝�.鐢ㄦ埛鎮ㄥソ锛屽緢楂樺叴涓烘偍鏈嶅姟锛屾湰鏈堜俊鐢ㄨ嚜璇勭粨鏋滆緝 濂斤紝缁х画淇濇寔鍝�.鐢ㄦ埛鎮ㄥソ锛屽緢楂樺叴涓烘偍鏈嶅姟锛屾湰鏈堜俊鐢ㄨ嚜璇勭粨鏋滆緝 濂斤紝缁х画淇濇寔鍝�.鐢ㄦ埛鎮ㄥソ锛屽緢楂樺叴涓烘偍鏈嶅姟锛屾湰鏈堜俊鐢ㄨ嚜璇勭粨鏋滆緝 濂斤紝缁х画淇濇寔鍝�.鐢ㄦ埛鎮ㄥソ锛屽緢楂樺叴涓烘偍鏈嶅姟锛屾湰鏈堜俊鐢ㄨ嚜璇勭粨鏋滆緝 濂斤紝缁х画淇濇寔鍝�.',
       },
 
@@ -27,41 +30,13 @@
 
     focus: false,
     value: '',
-    placeholder: '璇疯緭鍏ュ叧閿瓧'
+    placeholder: '璇疯緭鍏ユ兂瑕佹彁闂殑鍐呭'
   },
 
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
    */
   onLoad(options) {
-
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
-   */
-  onReady() {
-
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
-   */
-  onShow() {
-
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
-   */
-  onHide() {
-
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
-   */
-  onUnload() {
 
   },
 
@@ -87,25 +62,38 @@
       userName: app.globalData.userInfo.acountname,
       text: this.data.value,
     })
-    this.getAnswer(this.data.value)
+    const keyword = this.data.value
     this.setData({
       record,
       value: ''
     })
+
+    this.getAnswer(keyword)
   },
 
   getAnswer(q) {
-    let record = this.data.record
+    this.search({
+      keyword: q,
+      type: undefined
+    })
+  },
 
-    setTimeout(() => {
+  loadComplete() {
+    const results = this.data.results
+    console.log(results);
+
+    let record = this.data.record
+    results.forEach(r => {
       record.push({
         id: 'system',
         time: '',
         userId: 'system',
         userName: '鏅鸿兘瀹㈡湇',
-        text: '鐢ㄦ埛鎮ㄥソ锛屽緢楂樺叴涓轰綘鏈嶅姟',
+        type: r.typeId,
+        text: r,
       })
-      this.setData({record})
-    }, 1000);
+    });
+
+    this.setData({record})
   }
 })
\ No newline at end of file
diff --git a/pages/m_consult/consultonline/consultonline.wxml b/pages/m_consult/consultonline/consultonline.wxml
index 4e0273e..107a542 100644
--- a/pages/m_consult/consultonline/consultonline.wxml
+++ b/pages/m_consult/consultonline/consultonline.wxml
@@ -1,12 +1,18 @@
 <!--pages/m_consult/consultonline/consultonline.wxml-->
 <view class="consult-record">
-  <block wx:for="{{record}}">
-    <view wx:if="{{userId == item.userId}}" wx:key="index" class="consult-record_item_user">
+  <block wx:for="{{record}}" wx:key="index">
+    <view wx:if="{{userId == item.userId}}" class="consult-record_item_user">
       <view class="consult-text_user">{{item.text}}</view>
     </view>
     <view wx:else class="consult-record_item">
       <image src="/res/icons/avator_sys.png" class="consult-avator"></image>
-      <view class="consult-text">{{item.text}}</view>
+      <view wx:if="{{item.type == 0}}" class="consult-text">{{item.text}}</view>
+      <view wx:elif="{{item.type == 1}}" class="consult-text">
+        {{item.text.name}}
+      </view>
+      <view wx:elif="{{item.type == 2}}" class="consult-text">{{item.text.name}}</view>
+      <view wx:elif="{{item.type == 3}}" class="consult-text">{{item.text.name}}</view>
+      <view wx:elif="{{item.type == 4}}" class="consult-text">{{item.text.name}}</view>
     </view>
   </block>
 </view>
diff --git a/pages/m_consult/consultproblem/consultproblem.js b/pages/m_consult/consultproblem/consultproblem.js
index 301f980..8044311 100644
--- a/pages/m_consult/consultproblem/consultproblem.js
+++ b/pages/m_consult/consultproblem/consultproblem.js
@@ -1,99 +1,13 @@
-// pages/m_consult/consultproblem/consultproblem.js
-const consultservice = require("../../../service/consultservice")
-const util = require("../../../utils/util")
-const app = getApp()
+import ListPage from '../../../base/ListPage'
+const b_questions = require('../behaviors/b_questions')
+const b_elementTypes = require('../behaviors/b_elementTypes')
 
-Page({
-
+ListPage({
+  behaviors: [b_questions, b_elementTypes],
   /**
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
   data: {
-    loading: false,
-    menus: [
-      { name: '澶ф皵', value: 1 },
-      { name: '姘�', value: 2 },
-      { name: '娴锋磱', value: 3 },
-      { name: '鍦熷¥', value: 4 },
-      { name: '鍣0', value: 5 },
-      { name: '鍏�', value: 6 },
-      { name: '杈愬皠', value: 7 },
-      { name: '鏍�', value: 8 },
-      { name: '鍥轰綋搴熺墿', value: 9 },
-      { name: '鍖栧鍝�', value: 10 },
-      { name: '鍙拌处', value: 21 },
-      { name: '鎵ф硶', value: 31 },
-      { name: '鐫e療', value: 41 },
-      { name: '鐩戞祴', value: 51 },
-      { name: '鏈嶅姟', value: 61 },
-      { name: '鍏朵粬', value: 99 }
-    ],
-    items: [
-      [
-        { name: 'PM', value: 1  },
-        { name: 'NOX', value: 2  },
-        { name: 'O3', value: 3  },
-        { name: 'VOCs', value: 4  },
-        { name: '宸ヤ笟搴熸皵', value: 5  },
-        { name: '鏈哄姩杞﹀熬姘�', value: 6  },
-        { name: '鎵皹', value: 7  },
-        { name: '椁愰ギ娌圭儫', value: 8  },
-        { name: '鎭惰嚟', value: 9  },
-        { name: '鍏朵粬', value: 99 },
-      ],
-      [
-        { name: '鍦拌〃姘�', value: 1  },
-        { name: '鍦颁笅姘�', value: 2  },
-        { name: '楗敤姘�', value: 3  },
-        { name: '宸ヤ笟搴熸按', value: 4  },
-        { name: '鐢熸椿姹℃按', value: 5  },
-        { name: '鍟嗕笟姹℃按', value: 6  },
-        { name: '鍏朵粬', value: 99  },
-      ],
-      [
-        { name: '鐭虫补鍙婂叾浜у搧', value: 1  },
-        { name: '閲嶉噾灞炲拰閰哥⒈', value: 2  },
-        { name: '鍐滆嵂', value: 3  },
-        { name: '鏈夋満鐗╄川鍜岃惀鍏荤洂绫�', value: 4  },
-        { name: '鏀惧皠鎬ф牳绱�', value: 5  },
-        { name: '鍥轰綋搴熺墿', value: 6  },
-        { name: '搴熺儹', value: 7  },
-        { name: '鍏朵粬', value: 99  },
-      ],
-      [
-        { name: '鍐滅敯鑰曞湴', value: 1  },
-        { name: '宸ヤ笟浼佷笟鐢ㄥ湴', value: 2  },
-        { name: '鐭虫补寮�閲囩敤鍦�', value: 3  },
-        { name: '鐭垮北寮�閲囩敤鍦�', value: 4  },
-        { name: '鍏朵粬', value: 99  },
-      ],
-      [
-        { name: '宸ヤ笟鐢熶骇鍣0', value: 1  },
-        { name: '浜ら�氳繍杈撳櫔澹�', value: 2  },
-        { name: '寤虹瓚鏂藉伐鍣0', value: 3  },
-        { name: '绀句細鐢熸椿鍣0', value: 4  },
-        { name: '鍏朵粬', value: 99  },
-      ],
-      [
-        { name: '鐧戒寒姹℃煋', value: 1  },
-        { name: '浜哄伐鐧芥樇姹℃煋', value: 2  },
-        { name: '褰╁厜姹℃煋', value: 3  },
-        { name: '鍏朵粬', value: 99  },
-      ],
-      [
-        { name: '鐢电杈愬皠', value: 1  },
-        { name: '鏀惧皠鎬ц緪灏�', value: 2  },
-        { name: '鍏朵粬', value: 99  },
-      ],
-      [],
-      [],
-      [],
-      [],
-      [],
-      [],
-      [],
-      [],
-    ],
     selected: [{
       name: '鍏ㄩ儴',
       value: null
@@ -101,96 +15,16 @@
       name: '鍏ㄩ儴',
       value: null
     }],
-
-    questions: []
   },
 
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
    */
   onLoad(options) {
-    this.getQuestionsByType(1)
-    this.getEnElementTypes()
-    this.getEnElementSubTypes()
-  },
-
-  getQuestionsByType(page = 1) {
-    this.setData({loading: true})
-    setTimeout(() => {
-      this.setData({loading: false})
-    }, 100000);
-    var that = this
-    consultservice.getQuestionsByType(
-      app.globalData.accessToken.userId,
-      this.data.selected[0].value, this.data.selected[1].value,
-      page, 10, {
-        onPage(head) {
-          that.cPage = head.page
-          that.tPage = head.totalPage
-          that.setData({
-            totalCount: head.totalCount
-          })
-        },
-        success(res) {
-          res.forEach(r => {
-            r.cqCreateTime = util.formatTime(r.cqCreateTime)
-            r.answer = r.answer.replaceAll('\\n', '<br/>')
-          });
-          let questions = that.data.questions
-          if (page == 1) {
-            questions = []
-          }
-          questions = questions.concat(res)
-          that.setData({questions})
-        },
-        complete(e) {
-          that.setData({loading: false})
-        }
-      })
-  },
-
-  getEnElementTypes() {
-    var that = this
-    consultservice.getEnElementTypes(app.globalData.accessToken.userId, {
-      success(res) {
-        const menus = [{
-          name: '鍏ㄩ儴',
-          value: null,
-        }]
-        res.forEach(r => {
-          menus.push({
-            name: r.first,
-            value: r.second,
-          })
-        });
-        that.setData({menus})
-      }
+    const selectedValues = this.data.selected.map((obj, index) => {
+      return obj.value
     })
-  },
-
-  getEnElementSubTypes() {
-    var that = this
-    consultservice.getEnElementSubTypes(app.globalData.accessToken.userId, {
-      success(res) {
-        const items = [
-          [{
-            name: '鍏ㄩ儴',
-            value: null,
-          }]
-        ]
-        res.forEach(r => {
-          const l = []
-          r.forEach(s => {
-            l.push({
-              name: s.first,
-              value: s.second,  
-            })
-          });
-          items.push(l)
-        });
-        that.setData({items})
-      }
-    })
+    this.getQuestionsByType(1, selectedValues)
   },
 
   openChooseType() {
@@ -200,29 +34,12 @@
   },
 
   chooseMenu(e) {
-    console.log('chooseMenu');
-    console.log(e);
     const i = e.detail
     const menu = this.data.menus[i[0]]
     const item = this.data.items[i[0]][i[1]]
     this.setData({
       selected: [menu, item]
     })
-    this.getQuestionsByType()
-  },
-
-  // 鍘诲線闂瓟璇︽儏
-  gotoQA(e) {
-    const index = e.currentTarget.dataset.index
-    var qId = this.data.questions[index].cqGuid
-    wx.navigateTo({
-      url: '/pages/m_consult/consultdetailqa/consultdetailqa',
-      success: (res) => {
-        // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
-        res.eventChannel.emit('acceptDataFromOpenerPage', {
-          qId: qId
-        })
-      },
-    })
+    this.getQuestionsByType(1, [menu.value, item.value])
   },
 })
\ No newline at end of file
diff --git a/pages/m_consult/consultproblem/consultproblem.json b/pages/m_consult/consultproblem/consultproblem.json
index 280d969..65a28b6 100644
--- a/pages/m_consult/consultproblem/consultproblem.json
+++ b/pages/m_consult/consultproblem/consultproblem.json
@@ -3,7 +3,7 @@
   "navigationBarBackgroundColor": "#57E4CB",
   "navigationBarTextStyle": "white",
   "usingComponents": {
-    "mp-loading": "/component/loading/loading",
+    "c-result-item": "../base_c/c_result-item/c_result-item",
     "mp-sidebar": "/component/sidebar/sidebar"
   }
 }
\ No newline at end of file
diff --git a/pages/m_consult/consultproblem/consultproblem.wxml b/pages/m_consult/consultproblem/consultproblem.wxml
index 2213c06..a4744a2 100644
--- a/pages/m_consult/consultproblem/consultproblem.wxml
+++ b/pages/m_consult/consultproblem/consultproblem.wxml
@@ -3,36 +3,18 @@
 
 <view class="page">
   <view class="page__hd">
+  <view class="flex-h">
     <text style="color: #57E4CB;">{{selected[0].name}} > {{selected[1].name}}</text>
     <view class="filter" bindtap="openChooseType">
       <image src="/res/icons/filter.png" class="image-16"></image>
       绛涢��
     </view>
   </view>
-  <view class="page__bd">
-    <block wx:if="{{!loading}}">
-      <block wx:if="{{questions.length > 0}}">
-        <block wx:for="{{questions}}" wx:key="index">
-          <view class="fyui-box  fyui-box__text" bindtap="gotoQA" data-index="{{index}}">
-            <view class="fyui-box__hd">
-              <text class="fyui-box__content des subtitle">{{item.cqContent}}</text>
-            </view>
-            <view class="fyui-box__bd answer">
-              <view>绛旓細</view>
-              <rich-text class="des" nodes="{{item.answer}}"></rich-text>
-            </view>
-            <view class="fyui-box__ft">
-              <text class="tag3">鎻愰棶鏃堕棿锛歿{item.cqCreateTime}}</text>
-              <text class="tag3">鍥炲鏃堕棿锛歿{item.cqCreateTime}}</text>
-            </view>
-          </view>
-          <view wx:if="{{index == questions.length - 1}}" class="next-answer">鈥斺�斿埌搴曚簡鈥斺��</view>
-        </block>
-      </block>
-      <template wx:else is="nodataPage"></template>
-    </block>
-    <mp-loading duration="{{900}}" type="dot-gray" show="{{loading}}" animated="{{true}}"></mp-loading>
+  <view class="more">鍏眥{totalCount}}涓棶棰�</view>
   </view>
-  
+  <view class="page__bd">
+    <c-result-item results="{{questions}}" loading="{{loading}}" needLoadMore="{{needLoadMore}}"></c-result-item>
+  </view>
+  <view class="page__ft"></view>
   <mp-sidebar show="{{showMenu}}" menus="{{menus}}" items="{{items}}" bindsubmit="chooseMenu"></mp-sidebar>
 </view>
\ No newline at end of file
diff --git a/pages/m_consult/consultproblem/consultproblem.wxss b/pages/m_consult/consultproblem/consultproblem.wxss
index 1b2afc2..d847807 100644
--- a/pages/m_consult/consultproblem/consultproblem.wxss
+++ b/pages/m_consult/consultproblem/consultproblem.wxss
@@ -1,69 +1,7 @@
 /* pages/m_consult/consultproblem/consultproblem.wxss */
 .page__hd {
-  display: flex;
-  flex-wrap: wrap;
-  justify-content: space-between;
   background-color: white;
   padding: 16px;
-}
-
-.switch-tab {
-  border-radius: 8px;
-  color: var(--fyui-text-color_1);
-  width: 20vw;
-  background-color: white;
-  padding: 1vw;
-  margin-bottom: 8px;
-  text-align: center;
-  font-weight: 500;
-  font-size: 14px;
-}
-.switch-tab_selected {
-  background: linear-gradient(to bottom right, #65EAD2, #2BDEDC);
-  color: white;
-}
-
-.fyui-box__content {
-  padding: 0 8px;
-}
-
-.fyui-box__tag {
-  display: flex;
-  /* background-color: red; */
-  width: 100%;
-  justify-content: flex-end;
-}
-
-.fyui-box__tag .flex-h{
-  margin-right: 16px;
-}
-
-.fyui-box .answer {
-  display: flex;
-  flex-direction: row;
-  line-height: 18px;
-  font-size: 12px;
-  color: var(--fyui-text-color_3);
-}
-
-.des {
-  display: -webkit-box;
-  -webkit-box-orient: vertical;
-  -webkit-line-clamp: 3;
-  width: 100%;
-  overflow: hidden;
-  /* text-overflow: ellipsis; */
-}
-
-.subtitle{
-  font-size: 15px;
-}
-
-.next-answer {
-  text-align: center;
-  font-size: 12px;
-  color: var(--fyui-text-color_3);
-  padding: 8px;
 }
 
 .filter {
diff --git a/pages/m_consult/consultresult/consultresult.wxml b/pages/m_consult/consultresult/consultresult.wxml
index 9baabd2..7bc7616 100644
--- a/pages/m_consult/consultresult/consultresult.wxml
+++ b/pages/m_consult/consultresult/consultresult.wxml
@@ -27,7 +27,7 @@
             </view>
 
           </block>
-          <block wx:else="{{catagory.typeId === 2}}">
+          <block wx:elif="{{catagory.typeId === 2}}">
             <view wx:for="{{catagory.contents}}" wx:key="i2" wx:for-index="i2" data-index="{{i1}},{{i2}}" bindtap="gotoDetail">
               <view class="fyui-box  fyui-box__text">
                 <view class="fyui-box__hd">
diff --git a/pages/m_consult/consultsearch/consultsearch.json b/pages/m_consult/consultsearch/consultsearch.json
index 026ed97..50786fd 100644
--- a/pages/m_consult/consultsearch/consultsearch.json
+++ b/pages/m_consult/consultsearch/consultsearch.json
@@ -1,5 +1,5 @@
 {
-  "navigationBarTitleText": "鐜繚鐭ヨ瘑搴撲竴閿煡璇�",
+  "navigationBarTitleText": "鐜繚鐭ヨ瘑搴�",
   "navigationBarBackgroundColor": "#57E4CB",
   "navigationBarTextStyle": "white",
   "usingComponents": {
diff --git a/pages/m_learn/base_c/c_learn-item/c_learn-item.js b/pages/m_learn/base_c/c_learn-item/c_learn-item.js
new file mode 100644
index 0000000..19321df
--- /dev/null
+++ b/pages/m_learn/base_c/c_learn-item/c_learn-item.js
@@ -0,0 +1,40 @@
+// pages/m_learn/base_c/c_learn-item/c_learn-item.js
+import b_openFile from '../../behaviors/b_openFile'
+
+Component({
+  behaviors: [b_openFile],
+  options: {
+    addGlobalClass: true,
+  },
+  /**
+   * 缁勪欢鐨勫睘鎬у垪琛�
+   */
+  properties: {
+    results: {
+      type: Array,
+      value: []
+    },
+    loading: {
+      type: Boolean,
+      value: false
+    },
+    needLoadMore: {
+      type: Boolean,
+      value: false
+    },
+  },
+
+  /**
+   * 缁勪欢鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 缁勪欢鐨勬柟娉曞垪琛�
+   */
+  methods: {
+    
+  }
+})
diff --git a/pages/m_learn/base_c/c_learn-item/c_learn-item.json b/pages/m_learn/base_c/c_learn-item/c_learn-item.json
new file mode 100644
index 0000000..4222c9e
--- /dev/null
+++ b/pages/m_learn/base_c/c_learn-item/c_learn-item.json
@@ -0,0 +1,7 @@
+{
+  "component": true,
+  "usingComponents": {
+    "mp-icon": "/component/icon/icon",
+    "mp-loadingstatus": "/component/loadingstatus/loadingstatus"
+  }
+}
\ No newline at end of file
diff --git a/pages/m_learn/base_c/c_learn-item/c_learn-item.wxml b/pages/m_learn/base_c/c_learn-item/c_learn-item.wxml
new file mode 100644
index 0000000..295f3b1
--- /dev/null
+++ b/pages/m_learn/base_c/c_learn-item/c_learn-item.wxml
@@ -0,0 +1,32 @@
+<view>
+  <view wx:for="{{results}}" wx:key="index" wx:item="item" bindtap="openFile" data-index="{{index}}">
+    <view wx:if="{{item.lrResourcefiletype != 4}}" class="fyui-box fyui-panel">
+      <view class="fyui-box__hd">
+        <image src="{{item.lrPicurl}}" class="" mode="aspectFill" />
+      </view>
+      <view class="fyui-box__bd">
+        <view class="fyui-box__content">{{item.lrResourcetitle}}</view>
+        <view class="fyui-box__tag">
+          <view>{{item.lrPublishdate}}</view>
+          <view class="flex-h">
+            <image src="/res/icons/view.png" class="icon"></image>{{item.views}}
+          </view>
+        </view>
+      </view>
+    </view>
+    <view wx:else class="fyui-panel fyui-panel_video">
+      <view style="position: relative;">
+        <image src="{{item.lrPicurl}}" class="video-poster" mode="aspectFit" />
+        <mp-icon class="video-play" icon="play" color="white" size="50" type="filled"></mp-icon>
+      </view>
+      <view class="video-title">{{item.lrResourcetitle}}</view>
+      <view class="tag">
+        <view>{{item.lrPublishdate}}</view>
+        <view class="flex-h">
+          <image src="/res/icons/view.png" class="icon"></image>{{item.views}}
+        </view>
+      </view>
+    </view>
+  </view>
+  <mp-loadingstatus loading="{{loading}}" needLoadMore="{{needLoadMore}}" nodata="{{results.length == 0}}"></mp-loadingstatus>
+</view>
\ No newline at end of file
diff --git a/pages/m_learn/base_c/c_learn-item/c_learn-item.wxss b/pages/m_learn/base_c/c_learn-item/c_learn-item.wxss
new file mode 100644
index 0000000..4b0e1b5
--- /dev/null
+++ b/pages/m_learn/base_c/c_learn-item/c_learn-item.wxss
@@ -0,0 +1,27 @@
+/* pages/m_learn/base_c/c_learn-item/c_learn-item.wxss */
+.fyui-panel_video .video-poster {
+  width: 100%;
+  background-color: black;
+}
+
+.fyui-panel_video .video-title{
+  padding: 2px 16px;
+  font-size: 16px;
+}
+
+.fyui-panel_video .video-play {
+  position: absolute;
+  top: calc(50% - 25px);
+  left: calc(50% - 25px);
+  z-index: 10;
+  background-color: rgba(138, 138, 138, 0.712);
+  border-radius: 50%;
+}
+
+.fyui-panel_video .tag{
+  display: flex;
+  justify-content: space-between;
+  font-size: 12px;
+  color: var(--fyui-text-color_2);
+  padding: 4px 16px;
+}
\ No newline at end of file
diff --git a/pages/m_learn/behaviors/b_fetch.js b/pages/m_learn/behaviors/b_fetch.js
new file mode 100644
index 0000000..8653929
--- /dev/null
+++ b/pages/m_learn/behaviors/b_fetch.js
@@ -0,0 +1,60 @@
+const b_loadingStatus = require("../../../base/behaviors/b_loadingStatus")
+const lawservice = require("../../../service/lawservice")
+const moment = require('../../../utils/moment.min')
+const app = getApp()
+
+/**
+ * 鑾峰彇瀹堟硶鍩硅鏉愭枡
+ */
+module.exports = Behavior({
+  behaviors: [b_loadingStatus],
+  data: {
+    //鎼滅储缁撴灉
+    results: []
+  },
+  methods: {
+    loadmore(cPage) {
+      this.getResources(++cPage)
+    },
+
+    /**
+     * 鏍规嵁绛涢�夋潯浠惰幏鍙栧畧娉曞涔犳潗鏂�
+     * @param fileType 鏂囦欢绫诲瀷锛屽寘鎷琜1锛歰ffice鏂囨。锛�2锛氱綉鍧�锛�3锛氶煶棰戯紝4锛氳棰慮锛屼笉濉啓鏃惰〃绀烘煡璇㈡墍鏈夌被鍨�
+     */
+    getResources(cPage = 1, fileType) {
+      this.setData({loading: true})
+      const t = setTimeout(() => { this.setData({loading: false}) }, 10000);
+      var that = this
+      const user = app.globalData.userInfo
+      const condition = {
+        sceneTypeId: user.extension2
+      }
+      if (fileType) {
+        condition.fileType = fileType
+      }
+      lawservice.getLawRegulations(user.guid, cPage, condition, {
+        onHead(header) {
+          that.setData({
+            cPage: parseInt(header.currentPage),
+            tPage: parseInt(header.totalPage)
+          })
+        },
+        success(data) {
+          let results = that.data.results
+          data.forEach(d => {
+            d.views = parseInt(Math.random() * 1000 + 10)
+            d.lrPublishdate = moment(d.lrPublishdate).format('YYYY骞碝M鏈圖D鏃�')
+          });
+          results = results.concat(data)
+          that.setData({
+            results
+          })
+        },
+        complete() {
+          that.setData({loading: false})
+          clearTimeout(t)
+        }
+      }, app.globalData.perPage)
+    },
+  }
+})
\ No newline at end of file
diff --git a/pages/m_learn/behaviors/beLearn.js b/pages/m_learn/behaviors/b_openFile.js
similarity index 89%
rename from pages/m_learn/behaviors/beLearn.js
rename to pages/m_learn/behaviors/b_openFile.js
index 47ad59a..1020833 100644
--- a/pages/m_learn/behaviors/beLearn.js
+++ b/pages/m_learn/behaviors/b_openFile.js
@@ -1,17 +1,16 @@
-const app = getApp()
-
 /**
  * 瀹堟硶瀛︿範鏉愭枡鐨勮幏鍙栧拰鎵撳紑
  */
 module.exports = Behavior({
   data: {
-    resources: [],
   },
   methods: {
     /**
      * 瀹堟硶瀛︿範鏉愭枡鍐呭璺宠浆
      */
-    behaviorOpenFile: function (f) {
+    openFile(e) {
+      var index = e.currentTarget.dataset.index
+      let f = this.data.results[index]
       var url = ""
       switch (f.lrResourcefiletype) {
         //鏂囨。
@@ -55,11 +54,10 @@
         wx.navigateTo({
           url: url,
           success: (res) => {
-            // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
             res.eventChannel.emit('acceptDataFromOpenerPage', f)
           },
         })
       }
-    }
+    },
   }
 })
\ No newline at end of file
diff --git a/pages/m_learn/learfile/learnfile.js b/pages/m_learn/learfile/learnfile.js
index 1821ca5..d4ee24c 100644
--- a/pages/m_learn/learfile/learnfile.js
+++ b/pages/m_learn/learfile/learnfile.js
@@ -1,66 +1,20 @@
-// pages/m_learn/learfile/learnfile.js
-Page({
+import ListPage from '../../../base/ListPage'
+import b_fetch from '../behaviors/b_fetch'
 
+ListPage({
+  behaviors: [b_fetch],
   /**
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
   data: {
-
+    //瑙嗛绫诲瀷鐨勬枃浠�
+    fileType: 4
   },
 
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
    */
   onLoad(options) {
-
+    this.getResources(1, this.data.fileType)
   },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
-   */
-  onReady() {
-
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
-   */
-  onShow() {
-
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
-   */
-  onHide() {
-
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
-   */
-  onUnload() {
-
-  },
-
-  /**
-   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
-   */
-  onPullDownRefresh() {
-
-  },
-
-  /**
-   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
-   */
-  onReachBottom() {
-
-  },
-
-  /**
-   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
-   */
-  onShareAppMessage() {
-
-  }
 })
\ No newline at end of file
diff --git a/pages/m_learn/learfile/learnfile.json b/pages/m_learn/learfile/learnfile.json
index 8835af0..53350b0 100644
--- a/pages/m_learn/learfile/learnfile.json
+++ b/pages/m_learn/learfile/learnfile.json
@@ -1,3 +1,8 @@
 {
-  "usingComponents": {}
+  "navigationBarTitleText": "瀹堟硶瑙嗛",
+  "navigationBarBackgroundColor": "#65EAD2",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "c-learn-item": "../base_c/c_learn-item/c_learn-item"
+  }
 }
\ No newline at end of file
diff --git a/pages/m_learn/learfile/learnfile.wxml b/pages/m_learn/learfile/learnfile.wxml
index 7e32922..6576cb4 100644
--- a/pages/m_learn/learfile/learnfile.wxml
+++ b/pages/m_learn/learfile/learnfile.wxml
@@ -1,34 +1,6 @@
-<!--pages/m_learn/learfile/learnfile.wxml-->
-<view class="page__bd ">
-  <view wx:for="{{resources}}" wx:key="index" wx:item="item" bindtap="openFile" data-index="{{index}}">
-    <view wx:if="{{item.lrResourcefiletype != 4}}" class="fyui-box fyui-panel">
-      <view class="fyui-box__hd">
-        <image src="{{item.lrPicurl}}" class="" mode="aspectFill" />
-      </view>
-      <view class="fyui-box__bd">
-        <view class="fyui-box__content">{{item.lrResourcetitle}}</view>
-        <view class="fyui-box__tag">
-          <view>{{item.lrPublishdate}}</view>
-          <view class="flex-h">
-            <image src="/res/icons/view.png" class="icon"></image>{{item.views}}
-          </view>
-        </view>
-      </view>
-    </view>
-    <view wx:else class="fyui-panel fyui-panel_video">
-      <view style="position: relative;">
-        <image src="{{item.lrPicurl}}" class="video-poster" mode="aspectFit" />
-        <mp-icon class="video-play" icon="play" color="white" size="50" type="filled"></mp-icon>
-      </view>
-      <view class="video-title">{{item.lrResourcetitle}}</view>
-      <view class="tag">
-        <view>{{item.lrPublishdate}}</view>
-        <view class="flex-h">
-          <image src="/res/icons/view.png" class="icon"></image>{{item.views}}
-        </view>
-      </view>
-    </view>
+<view class="page ">
+  <view class="page__bd ">
+    <c-learn-item results="{{results}}" loading="{{loading}}" needLoadMore="{{needLoadMore}}"></c-learn-item>
   </view>
-</view>
-
-<view class="page__ft"></view>
\ No newline at end of file
+  <view class="page__ft"></view>
+</view>
\ No newline at end of file
diff --git a/pages/m_learn/learn/learn.js b/pages/m_learn/learn/learn.js
index 7b9b47f..537e9f6 100644
--- a/pages/m_learn/learn/learn.js
+++ b/pages/m_learn/learn/learn.js
@@ -1,11 +1,10 @@
 // pages/learn/learn.js
-const lawservice = require("../../../service/lawservice")
-const moment = require('../../../utils/moment.min')
-const beLearn = require('../behaviors/beLearn')
-const app = getApp()
+import ListPage from '../../../base/ListPage'
+import b_fetch from '../behaviors/b_fetch'
+import b_openFile from '../behaviors/b_openFile'
 
-Page({
-  behaviors: [beLearn],
+ListPage({
+  behaviors: [b_fetch, b_openFile],
   /**
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
@@ -24,9 +23,6 @@
         "name": "鍦ㄧ嚎鐩戞祴璁惧"
       }
     ],
-    pageList: [
-
-    ],
     banners: [
       {
         pic: '',
@@ -34,89 +30,26 @@
         fileType: ''
       },
     ],
-    resources: [],
-    text2: [{
-      title: "鍥犺繚绔犲缓绛戝鑷存墽娉�",
-      content: "鎵ф硶鎻忚堪锛氱幆淇濅富绠¢儴闂ㄥ彲璋冮槄骞朵綔涓烘墽娉曟函婧愪緷鎹箣涓�鐜繚涓荤閮ㄩ棬鍙皟闃呭苟浣滀负鎵ф硶婧簮渚濇嵁涔嬩竴",
-      tags: ['杩濇硶鎼缓', '渚濇硶鎷嗛櫎'],
-      views: 123,
-      time: '2021骞�3鏈�2鏃�',
-      likes: 233
-    }, {
-      title: "鍥犺繚绔犲缓绛戝鑷存墽娉�",
-      content: "鎵ф硶鎻忚堪锛氱幆淇濅富绠¢儴闂ㄥ彲璋冮槄骞朵綔涓烘墽娉曟函婧愪緷鎹箣涓�鐜繚涓荤閮ㄩ棬鍙皟闃呭苟浣滀负鎵ф硶婧簮渚濇嵁涔嬩竴",
-      tags: ['杩濇硶鎼缓', '渚濇硶鎷嗛櫎'],
-      views: 123,
-      time: '2021骞�3鏈�2鏃�',
-      likes: 233
-    }, {
-      title: "鍥犺繚绔犲缓绛戝鑷存墽娉�",
-      content: "鎵ф硶鎻忚堪锛氱幆淇濅富绠¢儴闂ㄥ彲璋冮槄骞朵綔涓烘墽娉曟函婧愪緷鎹箣涓�鐜繚涓荤閮ㄩ棬鍙皟闃呭苟浣滀负鎵ф硶婧簮渚濇嵁涔嬩竴",
-      tags: ['杩濇硶鎼缓', '渚濇硶鎷嗛櫎'],
-      views: 123,
-      time: '2021骞�3鏈�2鏃�',
-      likes: 233
-    }, {
-      title: "鍥犺繚绔犲缓绛戝鑷存墽娉�",
-      content: "鎵ф硶鎻忚堪锛氱幆淇濅富绠¢儴闂ㄥ彲璋冮槄骞朵綔涓烘墽娉曟函婧愪緷鎹箣涓�鐜繚涓荤閮ㄩ棬鍙皟闃呭苟浣滀负鎵ф硶婧簮渚濇嵁涔嬩竴",
-      tags: ['杩濇硶鎼缓', '渚濇硶鎷嗛櫎'],
-      views: 123,
-      time: '2021骞�3鏈�2鏃�',
-      likes: 233
-    }]
+    
   },
-  //璁$畻swiper楂樺害鏂规硶锛堝湪鍒囨崲鐨勬椂鍊欒皟鐢級
-  tabsHeight(element) {
-    let that = this;
-    let query = wx.createSelectorQuery(); //蹇呴』瑕佸厛鍒涘缓涓�涓煡璇�
-    query.select(element).boundingClientRect(function (rect) {
-      that.setData({
-        pageheight: rect.height + 'px'
-      });
-    }).exec();
-  },
-  swichNav: function (e) {
-    var that = this;
-    if (this.data.currentTab === e.target.dataset.current) {
-      return false;
-    } else {
-      that.setData({
-        currentTab: e.target.dataset.current,
-        navScrollLeft: e.target.dataset.current >= 4 ? ((e.target.dataset.current) * 60) : 0 //鍒ゆ柇褰撳墠閫変腑鐨勪釜鏁版槸鍚︽槸绗�5涓�
-      })
-      that.tabsHeight('.page' + e.target.dataset.current); //鏌ヨ鍝竴涓厓绱�
-    }
-  },
-  bindChange: function (e) {
-    var that = this;
-    that.setData({
-      currentTab: e.detail.current,
-      navScrollLeft: e.detail.current >= 4 ? ((e.detail.current) * 60) : 0 //鍒ゆ柇褰撳墠閫変腑鐨勪釜鏁版槸鍚︽槸绗�5涓�
-    });
-    // that.tabsHeight('.page'+e.target.dataset.current);	//鏌ヨ鍝竴涓厓绱�
-  },
-
+  
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
    */
   onLoad: function (options) {
-    // this.tabsHeight('.page0');
-    this.getResources()
+    this.getResources(1)
   },
 
-  onReachBottom () {
-    console.log('onReachBottom');
-    if (this.cPage && this.tPage) {
-      if (this.cPage < this.tPage) {
-        this.getResources(this.cPage + 1)
-      }
-    }
+  loadComplete() {
+    this.getBanner()
   },
 
   getBanner() {
     let banners = []
-    for (let i = 0; i < 6; i++) {
-      const d = this.data.resources[i]
+    const results = this.data.results
+    const max = results.length > 5 ? 5 : results.length
+    for (let i = 0; i < max; i++) {
+      const d = this.data.results[i]
       banners.push({
         pic: d.lrPicurl,
         url: d.lrBodyurl,
@@ -128,46 +61,15 @@
     })
   },
 
-  getResources(cPage = 1) {
-    var that = this
-    let user = app.globalData.userInfo
-    lawservice.getLawRegulations(user.guid, cPage, {sceneTypeId: user.extension2}, {
-      onHead(header) {
-        that.cPage = parseInt(header.currentPage)
-        that.tPage = parseInt(header.totalPage)
-        console.log(`cPage:${that.cPage}, tPage:${that.tPage}`);
-      },
-      success(data) {
-        let resources = that.data.resources
-        data.forEach(d => {
-          d.views = parseInt(Math.random() * 1000 + 10)
-          d.lrPublishdate = moment(d.lrPublishdate).format('YYYY骞碝M鏈圖D鏃�')
-        });
-        resources = resources.concat(data)
-        that.setData({
-          resources
-        })
-        if (that.cPage == 1) {
-          that.getBanner()
-        }
-      }
-    }, 10)
-  },
-
-  openFile(e) {
-    var index = e.currentTarget.dataset.index
-    let f = this.data.resources[index]
-    this.behaviorOpenFile(f)
-  },
   goto: function (e) {
     var url = ""
     var index = e.currentTarget.dataset.index
     switch (index) {
       case '0':
-        url = '/pages'
+        url = '/pages/m_learn/learfile/learnfile'
         break;
       case '1':
-        url = ""
+        url = "/pages/m_learn/learncase/learncase"
         break;
     }
     if (url != "") {
diff --git a/pages/m_learn/learn/learn.json b/pages/m_learn/learn/learn.json
index c8fcfef..a9e6b51 100644
--- a/pages/m_learn/learn/learn.json
+++ b/pages/m_learn/learn/learn.json
@@ -3,6 +3,7 @@
   "navigationBarBackgroundColor": "#65EAD2",
   "navigationBarTextStyle": "white",
   "usingComponents": {
-    "mp-icon": "/component/icon/icon"
+    "mp-icon": "/component/icon/icon",
+    "c-learn-item": "../base_c/c_learn-item/c_learn-item"
   }
 }
\ No newline at end of file
diff --git a/pages/m_learn/learn/learn.wxml b/pages/m_learn/learn/learn.wxml
index 2db44ee..448fdcd 100644
--- a/pages/m_learn/learn/learn.wxml
+++ b/pages/m_learn/learn/learn.wxml
@@ -35,8 +35,8 @@
       <view class="image-btn" bindtap="goto" data-index="0">
         <image src="/res/icons/learn_1.png" class="image-btn__2" mode="aspectFit" />
         <view class="image-btn_title">
-          <view class="image-btn_title_t">鐜繚瀹堟硶</view>
-          <view>瑙嗛銆佹枃妗f潗鏂�</view>
+          <view class="image-btn_title_t">瀹堟硶瑙嗛</view>
+          <view>瀹堟硶鍩硅鏉愭枡</view>
           <mp-icon class="image-btn_goto" icon="arrow" color="#7F7F7F" size="8" type="filled"></mp-icon>
         </view>
 
@@ -46,7 +46,7 @@
           <image src="/res/icons/learn_2.png" class="image-btn__2" mode="aspectFit" />
           <view class="image-btn_title">
             <view class="image-btn_title_t">鎵ф硶妗堜緥</view>
-            <view>鐩稿叧鎵ф硶妗堜緥</view>
+            <view>鎵ф硶鐫e療妗堜緥</view>
             <mp-icon class="image-btn_goto" icon="arrow" color="#7F7F7F" size="8" type="filled"></mp-icon>
           </view>
         </view>
@@ -57,62 +57,8 @@
       <view class="fyui-cell__bd">鐜繚瀹堟硶</view>
       <view class="fyui-cell__ft">鏇村</view>
     </view> -->
-    <view wx:for="{{resources}}" wx:key="index" wx:item="item" bindtap="openFile" data-index="{{index}}">
-      <view wx:if="{{item.lrResourcefiletype != 4}}" class="fyui-box fyui-panel">
-        <view class="fyui-box__hd">
-          <image src="{{item.lrPicurl}}" class="" mode="aspectFill" />
-        </view>
-        <view class="fyui-box__bd">
-          <view class="fyui-box__content">{{item.lrResourcetitle}}</view>
-          <view class="fyui-box__tag">
-            <view>{{item.lrPublishdate}}</view>
-            <view class="flex-h">
-              <image src="/res/icons/view.png" class="icon"></image>{{item.views}}
-            </view>
-          </view>
-        </view>
-      </view>
-      <view wx:else class="fyui-panel fyui-panel_video">
-        <view style="position: relative;">
-          <image src="{{item.lrPicurl}}" class="video-poster" mode="aspectFit" />
-          <mp-icon class="video-play" icon="play" color="white" size="50" type="filled"></mp-icon>
-        </view>
-        <view class="video-title">{{item.lrResourcetitle}}</view>
-        <view class="tag">
-          <view>{{item.lrPublishdate}}</view>
-          <view class="flex-h">
-            <image src="/res/icons/view.png" class="icon"></image>{{item.views}}
-          </view>
-        </view>
-      </view>
-    </view>
 
-    <!-- <view class="fyui-cell fyui-cell_select title">
-      <view class="fyui-cell__bd">鎵ф硶妗堜緥</view>
-      <view class="fyui-cell__ft">鏇村</view>
-    </view>
-    <view wx:for="{{text2}}" wx:key="index" data-index="index" wx:for-item="item">
-      <view class="fyui-box fyui-panel fyui-box__text">
-        <view class="fyui-box__hd">
-          {{item.title}}
-        </view>
-        <view class="fyui-box__bd">
-          <view class="fyui-box__content">{{item.content}}</view>
-          <view class="fyui-box__tag">
-            <view wx:for="{{item.tags}}" wx:key="i" data-index="i" wx:for-item="tag">{{tag}}</view>
-          </view>
-        </view>
-        <view class="fyui-box__ft">
-          <view class="flex-h">
-            <image src="/res/icons/view.png" class="icon"></image>{{item.views}}
-          </view>
-          <view class="flex-h">
-            <image src="/res/icons/like.png" class="icon"></image>{{item.likes}}
-          </view>
-          <view>{{item.time}}</view>
-        </view>
-      </view>
-    </view> -->
+    <c-learn-item results="{{results}}" loading="{{loading}}" needLoadMore="{{needLoadMore}}"></c-learn-item>
 
   </view>
 
diff --git a/pages/m_learn/learn/learn.wxss b/pages/m_learn/learn/learn.wxss
index 6ca3db0..8a525d9 100644
--- a/pages/m_learn/learn/learn.wxss
+++ b/pages/m_learn/learn/learn.wxss
@@ -98,31 +98,4 @@
   height: 20px;
   text-align: center;
   border-radius: 50%;
-}
-
-.fyui-panel_video .video-poster {
-  width: 100%;
-  background-color: black;
-}
-
-.fyui-panel_video .video-title{
-  padding: 2px 16px;
-  font-size: 16px;
-}
-
-.fyui-panel_video .video-play {
-  position: absolute;
-  top: calc(50% - 25px);
-  left: calc(50% - 25px);
-  z-index: 10;
-  background-color: rgba(138, 138, 138, 0.712);
-  border-radius: 50%;
-}
-
-.fyui-panel_video .tag{
-  display: flex;
-  justify-content: space-between;
-  font-size: 12px;
-  color: var(--fyui-text-color_2);
-  padding: 4px 16px;
 }
\ No newline at end of file
diff --git a/pages/m_learn/learncase/learncase.js b/pages/m_learn/learncase/learncase.js
index e31c7dc..d3f82a7 100644
--- a/pages/m_learn/learncase/learncase.js
+++ b/pages/m_learn/learncase/learncase.js
@@ -5,7 +5,10 @@
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
   data: {
-
+    //鎸夌収鐑棬鎺ㄨ崘鏈哄埗鑾峰彇鎵ф硶妗堜緥
+    keyobj: {keyword: '', type: 3},
+    //涓婃粦瑙﹀簳鍔犺浇
+    reachBottom: false
   },
 
   /**
@@ -16,51 +19,11 @@
   },
 
   /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
-   */
-  onReady() {
-
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
-   */
-  onShow() {
-
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
-   */
-  onHide() {
-
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
-   */
-  onUnload() {
-
-  },
-
-  /**
-   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
-   */
-  onPullDownRefresh() {
-
-  },
-
-  /**
    * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
    */
   onReachBottom() {
-
+    this.setData({
+      reachBottom: true
+    })
   },
-
-  /**
-   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
-   */
-  onShareAppMessage() {
-
-  }
 })
\ No newline at end of file
diff --git a/pages/m_learn/learncase/learncase.json b/pages/m_learn/learncase/learncase.json
index 8835af0..e7c97c9 100644
--- a/pages/m_learn/learncase/learncase.json
+++ b/pages/m_learn/learncase/learncase.json
@@ -1,3 +1,8 @@
 {
-  "usingComponents": {}
+  "navigationBarTitleText": "鎵ф硶妗堜緥",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "c-result-item-search": "../../m_consult/c_result-item-search/c_result-item-search"
+  }
 }
\ No newline at end of file
diff --git a/pages/m_learn/learncase/learncase.wxml b/pages/m_learn/learncase/learncase.wxml
index 138f3fa..b153607 100644
--- a/pages/m_learn/learncase/learncase.wxml
+++ b/pages/m_learn/learncase/learncase.wxml
@@ -1,2 +1,8 @@
 <!--pages/m_learn/learncase/learncase.wxml-->
-<text>pages/m_learn/learncase/learncase.wxml</text>
+<view class="page">
+  <view class="page__hd"></view>
+  <view class="page__bd">
+    <c-result-item-search reachBottom="{{reachBottom}}" keyobj="{{keyobj}}"></c-result-item-search>
+  </view>
+  <view class="page__ft"></view>
+</view>
\ No newline at end of file
diff --git a/pages/m_service/c_schedule/c_schedule.js b/pages/m_service/c_schedule/c_schedule.js
new file mode 100644
index 0000000..462e2ed
--- /dev/null
+++ b/pages/m_service/c_schedule/c_schedule.js
@@ -0,0 +1,66 @@
+// pages/m_service/c_schedule/c_schedule.js
+const moment = require('../../../utils/moment.min')
+
+Component({
+  options: {
+    addGlobalClass: true
+  },
+  /**
+   * 缁勪欢鐨勫睘鎬у垪琛�
+   */
+  properties: {
+    title: {
+      type: String,
+      value: '钀ヤ笟鎵х収缁湡'
+    },
+    time: {
+      type: String,
+      value: '2022-9-10 鏄熸湡鍏�'
+    },
+    leftDays: {
+      type: Number,
+      value: 2
+    },
+  },
+
+  /**
+   * 缁勪欢鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  lifetimes: {
+    attached: function () {
+      this._init()
+    }
+  },
+
+  /**
+   * 缁勪欢鐨勬柟娉曞垪琛�
+   */
+  methods: {
+    _init() {
+      moment.updateLocale('en', {
+        weekdays: '鏄熸湡鏃鏄熸湡涓�_鏄熸湡浜宊鏄熸湡涓塤鏄熸湡鍥沖鏄熸湡浜擾鏄熸湡鍏�'.split('_')
+      });
+      // console.log(moment.locales());
+      // moment.locale('ch')
+      const now = moment().hour(0).minute(0).second(0).millisecond(0)
+      const s = moment(now).add(3, 'days')
+
+      let leftDays = now.diff(s, 'days')
+      const time = s.format('YYYY-MM-DD dddd')
+      this.setData({
+        time,
+        leftDays
+      })
+    },
+    goto() {
+      wx.navigateTo({
+        url: '/pages/m_service/p_scheduledetail/p_scheduledetail',
+        success: (result) => {},
+      })
+    }
+  }
+})
\ No newline at end of file
diff --git a/pages/m_service/c_schedule/c_schedule.json b/pages/m_service/c_schedule/c_schedule.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/pages/m_service/c_schedule/c_schedule.json
@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/m_service/c_schedule/c_schedule.wxml b/pages/m_service/c_schedule/c_schedule.wxml
new file mode 100644
index 0000000..36e94d1
--- /dev/null
+++ b/pages/m_service/c_schedule/c_schedule.wxml
@@ -0,0 +1,15 @@
+<!--pages/m_service/c_schedule/c_schedule.wxml-->
+<view class="schedule-card {{leftDays < 0 ? 'schedule-card__2' : ''}}" bindtap="goto">
+  <view class="schedule-tag">{{leftDays < 0 ? 'FUTURE' : 'TODAY'}}</view>
+  <view class="schedule-category">
+    <image class="image-16" src="/res/icons/schedule_1.png"></image>
+    <text>鐜繚鏃ョ▼</text>
+  </view>
+  <view class="schedule-title">{{title}}</view>
+  <view class="schedule-time">
+    <text>{{time}}</text>
+    <text wx:if="{{leftDays > 0}}">杩囧幓{{leftDays}}澶�</text>
+    <text wx:elif="{{leftDays == 0}}">浠婂ぉ</text>
+    <text wx:else>杩樻湁{{-leftDays}}澶�</text>
+  </view>
+</view>
diff --git a/pages/m_service/c_schedule/c_schedule.wxss b/pages/m_service/c_schedule/c_schedule.wxss
new file mode 100644
index 0000000..f2be2c0
--- /dev/null
+++ b/pages/m_service/c_schedule/c_schedule.wxss
@@ -0,0 +1,47 @@
+/* pages/m_service/c_schedule/c_schedule.wxss */
+.schedule-card {
+  position: relative;
+  background: linear-gradient(0deg, #e9c07f, #F8BD6B, #FFAC38);
+  /* background-color: aqua; */
+  margin: 0 10px;
+  padding: 8px;
+  color: rgb(255, 255, 255);
+  border-radius: 6px;
+}
+
+.schedule-card__2 {
+  background: linear-gradient(0deg, #7bc8fc, #72c4fc, #64BEFB);
+}
+
+.schedule-tag {
+  font-size: 14px;
+  position: absolute;
+  top: 0;
+  right: 4px;
+  color: rgba(255, 255, 255, 0.15);
+  font-size: 30px;
+}
+
+.schedule-category {
+  display: flex;
+  align-items: center;
+  font-size: 14px;
+}
+
+.schedule-category>text {
+  margin-left: 4px;
+}
+
+.schedule-title {
+  font-size: 20px;
+  margin: 12px 0;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.schedule-time {
+  display: flex;
+  justify-content: space-between;
+  font-size: 14px;
+}
\ No newline at end of file
diff --git a/pages/m_service/p_schedule/p_schedule.js b/pages/m_service/p_schedule/p_schedule.js
new file mode 100644
index 0000000..a9c4fa4
--- /dev/null
+++ b/pages/m_service/p_schedule/p_schedule.js
@@ -0,0 +1,110 @@
+// pages/m_service/p_schedule/p_schedule.js
+const moment = require('../../../utils/moment.min')
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    totals: 0,
+    schedules: [{
+      category: '2022骞�9鏈堢幆淇濆伐浣滄棩绋�',
+      details: [{
+        time: '9鏈�10鏃�',
+        name: '鐜繚鏃ョ▼',
+        left: 3,
+      }]
+    }]
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    const now = moment()
+    const year = moment().year()
+    const schedules = []
+    let totals = 0
+    for (let m = 1; m <= 12; m++) {
+      const s = {
+        category: `${year}骞�${m}鏈堢幆淇濆伐浣滄棩绋媊,
+        details: []
+      }
+      //10,15,20
+      let t1 = moment(`${year}-${m}-10`)
+      let d1 = t1.diff(now, 'days')
+      s.details.push({
+        time: t1.format('MM鏈圖D鏃�'),
+        name: '鐜繚鏃ョ▼鐜繚鏃ョ▼鐜繚鏃ョ▼鐜繚鏃ョ▼鐜繚鏃ョ▼鐜繚鏃ョ▼',
+        left: d1,
+      })
+      let t2 = moment(`${year}-${m}-15`)
+      let d2 = t2.diff(now, 'days')
+      s.details.push({
+        time: t2.format('MM鏈圖D鏃�'),
+        name: '鐜繚鏃ョ▼',
+        left: d2,
+      })
+      let t3 = moment(`${year}-${m}-20`)
+      let d3 = t3.diff(now, 'days')
+      s.details.push({
+        time: t3.format('MM鏈圖D鏃�'),
+        name: '鐜繚鏃ョ▼',
+        left: d3,
+      })
+      schedules.push(s)
+      totals += 3
+    }
+    this.setData({schedules, totals})
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/m_service/p_schedule/p_schedule.json b/pages/m_service/p_schedule/p_schedule.json
new file mode 100644
index 0000000..a9227d7
--- /dev/null
+++ b/pages/m_service/p_schedule/p_schedule.json
@@ -0,0 +1,5 @@
+{
+  "navigationBarTitleText": "鍏ㄩ儴鏃ョ▼",
+  "navigationBarBackgroundColor": "#EAFFF1",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/m_service/p_schedule/p_schedule.wxml b/pages/m_service/p_schedule/p_schedule.wxml
new file mode 100644
index 0000000..a4cec4d
--- /dev/null
+++ b/pages/m_service/p_schedule/p_schedule.wxml
@@ -0,0 +1,26 @@
+<view class="page">
+  <view class="page__hd">
+    <view>鍏辨湁{{totals}}鏉℃棩绋嬭褰�</view>
+  </view>
+  <view class="page__bd">
+    <block wx:for="{{schedules}}" wx:key="index">
+      <view class="sm-title">{{item.category}}</view>
+      <view wx:for="{{item.details}}" wx:key="i" wx:for-item="d" class="sm-card">
+        <view class="sm-time">{{d.time}}</view>
+        <view class="history_icon">
+          <view class="history_icon_1">
+            <view></view>
+          </view>
+          <view class="history_icon_2">d</view>
+        </view>
+        <view class="{{d.left < 0 ? 'sm-content__past' : ''}} sm-content">
+          <view class="sm-content__left">{{d.name}}</view>
+          <view class="sm-content__right">{{d.left >= 0 ? '鍓�' : '杩囧幓'}}<text>{{d.left < 0 ? -d.left : d.left}}</text>澶�</view>
+        </view>
+      </view>
+    </block>
+  </view>
+  <view class="page__ft">
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/m_service/p_schedule/p_schedule.wxss b/pages/m_service/p_schedule/p_schedule.wxss
new file mode 100644
index 0000000..95da403
--- /dev/null
+++ b/pages/m_service/p_schedule/p_schedule.wxss
@@ -0,0 +1,104 @@
+/* pages/m_service/p_schedule/p_schedule.wxss */
+.page__bd {
+  padding: 10px;
+  background-color: white;
+}
+
+.sm-title {
+  font-size: 14px;
+  margin-top: 16px;
+  margin-bottom: 8px;
+}
+
+.sm-card {
+  display: flex;
+  border-radius: 6px;
+  margin-bottom: 8px;
+}
+
+.sm-time {
+  font-size: 12px;
+}
+
+.history_icon {
+  width: 10vw;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  justify-content: flex-start;
+  align-items: center;
+}
+
+.history_icon .history_icon_1 {
+  width: 22px;
+  height: 22px;
+  background-color: #cce9f8;
+  border-radius: 50%;
+  opacity: 0.2;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+.history_icon .history_icon_1>view {
+  width: 11px;
+  height: 11px;
+  background: #1addbd;
+  border-radius: 50%;
+  z-index: 10;
+}
+
+.history_icon .history_icon_2 {
+  width: 0px;
+  height: 100%;
+  /* padding: 10px 0px; */
+  border: 1px dashed #EBF8FF;
+  color: transparent;
+}
+
+.sm-content {
+  background-color: #EBF8FF;
+  border-radius: 6px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding-left: 10px;
+  width: 50%;
+  flex: 1;
+  font-size: 14px;
+}
+
+.sm-content__left{
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  width: 50%;
+}
+
+.sm-content__right {
+  background-color: #64BEFB;
+  padding: 10px 16px;
+  color: white;
+  white-space: nowrap;
+  width: 30%;
+  text-align: center;
+  border-top-right-radius: 6px;
+  border-bottom-right-radius: 6px;
+}
+
+.sm-content__right>text {
+  font-size: 20px;
+}
+
+.sm-content__past {
+  background: #F5F5F5;
+  color: #ADADAD;
+}
+
+.sm-content__past .sm-content__left {
+}
+
+.sm-content__past .sm-content__right {
+  background-color: #E4E4E4;
+  color: #ADADAD;
+}
\ No newline at end of file
diff --git a/pages/m_service/p_scheduledetail/p_scheduledetail.js b/pages/m_service/p_scheduledetail/p_scheduledetail.js
new file mode 100644
index 0000000..6175338
--- /dev/null
+++ b/pages/m_service/p_scheduledetail/p_scheduledetail.js
@@ -0,0 +1,36 @@
+// pages/m_service/p_scheduledetail/p_scheduledetail.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    steps:[{
+      index: '01',
+      title: ['鍓嶅線鐜�', '淇濋儴闂�'],
+      content: '鍓嶅線鐩稿叧鐜繚閮ㄩ棬鎻愪緵鐩稿叧璇佷欢锛屽彲杩涜钀ヤ笟鎵х収缁湡銆�'
+    },{
+      index: '02',
+      title: ['钀ヤ笟鎵�', '鐓х画鏈�'],
+      content: '鍓嶅線鐩稿叧鐜繚閮ㄩ棬鎻愪緵鐩稿叧璇佷欢锛屽彲杩涜钀ヤ笟鎵х収缁湡銆�'
+    },{
+      index: '03',
+      title: ['钀ヤ笟鎵�', '鐓х画鏈�'],
+      content: '鍓嶅線鐩稿叧鐜繚閮ㄩ棬鎻愪緵鐩稿叧璇佷欢锛屽彲杩涜钀ヤ笟鎵х収缁湡銆�'
+    }]
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  onSubmit() {
+    wx.navigateTo({
+      url: '/pages/m_service/p_schedule/p_schedule',
+      success: (result) => {},
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/m_service/p_scheduledetail/p_scheduledetail.json b/pages/m_service/p_scheduledetail/p_scheduledetail.json
new file mode 100644
index 0000000..d57ad74
--- /dev/null
+++ b/pages/m_service/p_scheduledetail/p_scheduledetail.json
@@ -0,0 +1,5 @@
+{
+  "navigationBarTitleText": "鏃ョ▼璇︽儏",
+  "navigationBarBackgroundColor": "#EAFFF1",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/m_service/p_scheduledetail/p_scheduledetail.wxml b/pages/m_service/p_scheduledetail/p_scheduledetail.wxml
new file mode 100644
index 0000000..e407da1
--- /dev/null
+++ b/pages/m_service/p_scheduledetail/p_scheduledetail.wxml
@@ -0,0 +1,33 @@
+<!--pages/m_service/p_scheduledetail/p_scheduledetail.wxml-->
+<view class="page">
+  <view class="page__hd">
+    <view class="sd-card">
+      <view class="sd-card__title">浠婃棩</view>
+      <view class="sd-card__content">钀ヤ笟鎵х収缁湡</view>
+    </view>
+
+    <view class="sd-item">
+      <view>鏃ョ▼绫诲埆</view>
+      <view>鐜繚鏃ョ▼</view>
+    </view>
+    <view class="sd-item">
+      <view>寮�濮嬫椂闂�</view>
+      <view class="sd-item__time">2022骞�9鏈�01鏃�</view>
+    </view>
+    <view class="sd-item">
+      <view>缁撴潫鏃堕棿</view>
+      <view class="sd-item__time">2022骞�9鏈�10鏃�</view>
+    </view>
+  </view>
+  <view class="page__bd">
+    <view class="sd-divider"> <text>* * *</text> 鏃ョ▼鎿嶄綔娴佺▼鎻愮ず <text>* * *</text> </view>
+    <view class="sd-step" wx:for="{{steps}}" wx:key="index">
+      <text class="sd-step__index">{{item.index}}</text>
+      <view class="sd-step__title">{{item.title[0]}}<text>{{item.title[1]}}</text></view>
+      <view class="sd-step__content">{{item.content}}</view>
+    </view>
+  </view>
+  <view class="page__ft">
+    <view class="submit" bindtap="onSubmit">鏌ョ湅鍏ㄩ儴鏃ョ▼</view>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/m_service/p_scheduledetail/p_scheduledetail.wxss b/pages/m_service/p_scheduledetail/p_scheduledetail.wxss
new file mode 100644
index 0000000..64bd28e
--- /dev/null
+++ b/pages/m_service/p_scheduledetail/p_scheduledetail.wxss
@@ -0,0 +1,81 @@
+/* pages/m_service/p_scheduledetail/p_scheduledetail.wxss */
+.page__hd {
+  padding: 10px 16px 10px 16px;
+}
+
+.sd-card {
+  background-color: #FEB145;
+  border-radius: 6px;
+  color: white;
+}
+
+.sd-card__title {
+  text-align: center;
+  font-size: 16px;
+  padding: 8px;
+}
+
+.sd-card__content {
+  font-size: 20px;
+  text-align: center;
+  background-color: #FFF5E8;
+  color: #FFAD3A;
+  padding: 8px 8px 20px 8px;
+
+}
+
+.sd-item {
+  font-size: 14px;
+  display: flex;
+  justify-content: space-between;
+  /* background-color: white; */
+  margin-top: 16px;
+  align-items: center;
+}
+
+.sd-item__time {
+  background-color: #FFAC38;
+  border-radius: 6px;
+  color: white;
+  padding: 4px 14px;
+}
+
+.sd-divider {
+  font-size: 20px;
+  text-align: center;
+  margin-top: 30px;
+}
+
+.sd-divider>text {
+  vertical-align: middle;
+  color: #FFAC38;
+}
+
+.sd-step {
+  position: relative;
+  padding: 4px 16px;
+}
+
+.sd-step__index{
+  position: absolute;
+  font-size: 32px;
+  color: #ffe3bc;
+  z-index: -1;
+}
+
+.sd-step__title {
+  margin-top: 26px;
+  font-size: 18px;
+}
+
+.sd-step__title>text {
+  color: #FEB34C;
+}
+
+.sd-step__content {
+  font-size: 14px;
+}
+
+.submit{
+  background: linear-gradient(270deg, #FEB145 0%, #FFBF6C 100%);
+}
\ No newline at end of file
diff --git a/pages/test2/test2.js b/pages/test2/test2.js
index db9fc64..8dfbe1b 100644
--- a/pages/test2/test2.js
+++ b/pages/test2/test2.js
@@ -50,4 +50,64 @@
       showPreview: true
     });
   },
+
+    /**
+   * 鑾峰彇鐑棬鎼滅储鍐呭
+   */
+  getHotTopic() {
+    var that = this
+    // 1. 鐑棬娉曞緥娉曡
+    consultservice.getTopicLaw(app.globalData.accessToken.userId, {
+      success(res) {
+        res.forEach(r => {
+          r.mfKeywordLv1 = r.mfKeywordLv1.split('銆�').slice(0, 5)
+          r.mfReleaseDate = that.formatTime(r.mfReleaseDate)
+          r.mfEffectiveDate = that.formatTime(r.mfEffectiveDate)
+          r.mfClosingDate = that.formatTime(r.mfClosingDate)
+        });
+        that.setData({
+          'pageList[0]': res,
+          'pageList[4]': res
+        })
+      }
+    })
+    // 2. 鐑棬娉曞緥娉曡鏉$洰
+    consultservice.getTopicItem(app.globalData.accessToken.userId, {
+      success(res) {
+        res.forEach(r => {
+          r.miItemContent = r.miItemContent.replaceAll('\\n', '<br/>')
+        });
+        that.setData({
+          'pageList[3]': res
+        })
+      }
+    })
+    // 3. 鐑棬闂瓟
+    consultservice.getTopicQA(app.globalData.accessToken.userId, {
+      success(res) {
+        res.forEach(r => {
+          r.cqCreateTime = that.formatTime(r.cqCreateTime)
+        });
+        that.setData({
+          'pageList[1]': res
+        })
+      }
+    })
+    // 4. 鐑棬妗堜緥
+    consultservice.getTopicCase(app.globalData.accessToken.userId, {
+      success(res) {
+        res.forEach(r => {
+          r.ecSummary = r.ecSummary.replaceAll('\\n', '<br/>')
+          r.ecMeaning = r.ecMeaning.replaceAll('\\n', '<br/>')
+          r.ecExamined = r.ecExamined.replaceAll('\\n', '<br/>')
+          r.ecEnlightenment = r.ecEnlightenment.replaceAll('\\n', '<br/>')
+          r.ecOccurDate = that.formatTime(r.ecOccurDate)
+        });
+        that.setData({
+          'pageList[2]': res
+        })
+        console.log(that.data.pageList);
+      }
+    })
+  },
 })
\ No newline at end of file
diff --git a/project.config.json b/project.config.json
index 3278700..c45faf7 100644
--- a/project.config.json
+++ b/project.config.json
@@ -45,10 +45,11 @@
     "useCompilerPlugins": false,
     "ignoreUploadUnusedFiles": false,
     "useStaticServer": true,
-    "minifyWXML": true
+    "minifyWXML": true,
+    "ignoreDevUnusedFiles": false
   },
   "compileType": "miniprogram",
-  "libVersion": "2.25.2",
+  "libVersion": "2.26.0",
   "appid": "wxffd1438dd373fcf6",
   "projectname": "ep-law-abiding",
   "editorSetting": {
diff --git a/res/icons/schedule_1.png b/res/icons/schedule_1.png
new file mode 100644
index 0000000..4f44272
--- /dev/null
+++ b/res/icons/schedule_1.png
Binary files differ
diff --git a/res/icons/schedule_2.png b/res/icons/schedule_2.png
new file mode 100644
index 0000000..b7e8b71
--- /dev/null
+++ b/res/icons/schedule_2.png
Binary files differ
diff --git a/res/icons/text_star.png b/res/icons/text_star.png
new file mode 100644
index 0000000..70edb61
--- /dev/null
+++ b/res/icons/text_star.png
Binary files differ
diff --git a/service/baserequest.js b/service/baserequest.js
index 464bfb6..687b48e 100644
--- a/service/baserequest.js
+++ b/service/baserequest.js
@@ -11,8 +11,8 @@
 
 const originProperties = ['url', 'data', 'header', 'method', 'success', 'fail', 'complete'];
 // const baseUrl = "http://127.0.0.1:8080"
-// const baseUrl = "http://192.168.1.106:8080"
-const baseUrl = "https://fyami.com.cn:447"
+const baseUrl = "http://192.168.0.106:8080"
+// const baseUrl = "https://fyami.com.cn:447"
 // const basePicUrl = baseUrl + "/images/"
 const basePicUrl = "https://fyami.com.cn:447/images/"
 const baseIconUrl = "https://fyami.com.cn:447/images/weixin/eplaw/"
diff --git a/service/consultservice.js b/service/consultservice.js
index 2be7708..3af2627 100644
--- a/service/consultservice.js
+++ b/service/consultservice.js
@@ -21,12 +21,21 @@
     let fun1 = util.deepCopy(cb)
     fun1.success = function (res) {
       if (res.success) {
+        res.data.forEach(r => {
+          if (r.imgUrl && r.imgUrl != '' && r.imgUrl != null) {
+            r.imgUrl = $f.basePicUrl + r.imgUrl
+          }
+          r.time = util.formatTime(r.time)
+          r.des = r.des.replaceAll('\\n', '<br/>')
+        });
         if (cb.onPage) {
           cb.onPage(res.head)
         }
         cb.success(res.data)
       } else {
-        cb.fail(res.message)
+        if (cb.fail) {
+          cb.fail(res.message)
+        }
       }
     }
 

--
Gitblit v1.9.3