From 5d8e52e398bff7bc8f83e8f5b8a387175b958c98 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期五, 24 二月 2023 10:20:18 +0800
Subject: [PATCH] 2023.2.24

---
 pages/mService/cSchedule/cSchedule.json                             |    4 
 pages/mService/pServicehome/servicehome.wxss                        |   39 
 pages/mUser/pInstructions/pInstructions.js                          |   26 
 pages/mConsult/consultonline/consultonline.wxss                     |  133 
 pages/mUser/personalauthentication/personalauthentication.js        |  127 
 pages/mConsult/consultonline/consultonline.json                     |   11 
 pages/mService/pSchedule/pSchedule.json                             |    5 
 pages/mService/pScheduledetail/pScheduledetail.js                   |   40 
 pages/mUser/pChangepw/pChangepw.wxml                                |   15 
 pages/mUser/baseC/cSceneInfo/cSceneInfo.js                          |  267 +
 pages/mUser/baseC/cCompanyInfo/cCompanyInfo.json                    |   10 
 pages/mUser/pSupport/pSupport.js                                    |   19 
 pages/mService/pSchedule/pSchedule.wxss                             |  104 
 pages/mUser/pInstructions/pInstructions.wxml                        |    7 
 pages/mService/pScheduledetail/pScheduledetail.json                 |    5 
 pages/mUser/baseC/cSceneInfo/cSceneInfo.json                        |   12 
 pages/mUser/baseC/cSceneInfo/cSceneInfo.wxss                        |   82 
 pages/mConsult/consultsearch/consultsearch.js                       |  140 
 pages/mLedger/ledgerhome/ledgerhome.json                            |    7 
 pages/mConsult/consultresult/consultresult.wxml                     |   63 
 pages/mService/pServicehome/servicehome.json                        |    0 
 pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.js   |   98 
 pages/mUser/mine/mine.wxss                                          |   96 
 pages/mLearn/baseC/cLearnItem/cLearnItem.wxml                       |   32 
 pages/mConsult/consultdetailcase/consultdetailcase.wxml             |   78 
 pages/mUser/userlogin/userlogin.json                                |    0 
 pages/mPromise/promisesign/promisesign.wxml                         |   13 
 app.wxss                                                            |    8 
 pages/mLearn/learncase/learncase.js                                 |   29 
 pages/mAssessment/assessment/assessment.wxss                        |  192 
 pages/text/text.wxml                                                |    9 
 res/icons/change_icon.jpg                                           |    0 
 pages/mUser/companyregister/companyregister.json                    |    0 
 pages/mLearn/pLearnvideo/pLearnvideo.wxss                           |   73 
 pages/mLedger/ledgerhome/ledgerhome.wxss                            |  173 
 pages/mConsult/cResultItemSearch/cResultItemSearch.wxml             |    1 
 pages/mUser/pSupport/pSupport.wxml                                  |   12 
 pages/mConsult/consultproblem/consultproblem.wxss                   |   14 
 pages/mLearn/pLearnvideo/pLearnvideo.json                           |   10 
 pages/mUser/companyauthentication/companyauthentication.js          |   18 
 pages/mLearn/learncase/learncase.wxss                               |    1 
 pages/mConsult/consultdetail/consultdetail.wxss                     |   32 
 pages/mLedger/ledgerhistory/ledgerhistory.wxss                      |   85 
 pages/mUser/pQrcode/pQrcode.json                                    |    0 
 pages/mService/pServicehome/servicehome.js                          |   66 
 pages/mUser/sceneauthentication/sceneauthentication.wxml            |    7 
 pages/mUser/pQrcode/pQrcode.js                                      |   28 
 res/icons/qrcode.png                                                |    0 
 pages/mUser/companyregister/companyregister.wxss                    |    1 
 pages/mService/cSchedule/cSchedule.js                               |   38 
 pages/mExtra/pSupervisionchange/pSupervisionchange.js               |  156 
 pages/mUser/userlogin/userlogin.wxss                                |   52 
 pages/mLearn/behaviors/bOpenFile.js                                 |   63 
 pages/mLedger/ledgerupload/ledgerupload.wxml                        |   27 
 app.json                                                            |  107 
 pages/mUser/userregistercompany/userregistercompany.js              |  249 +
 pages/mConsult/baseC/cResultItem/cResultItem.js                     |   85 
 data/schedules.js                                                   |    9 
 pages/mLearn/baseC/cLearnItem/cLearnItem.js                         |   40 
 pages/mUser/userloginpw/userloginpw.js                              |  151 
 pages/mUser/userregistergov/userregistergov.wxml                    |    2 
 pages/mLearn/learncase/learncase.json                               |    8 
 pages/mLedger/ledgerhistory/ledgerhistory.json                      |    8 
 pages/mUser/pQrcode/pQrcode.wxss                                    |    1 
 pages/mUser/userloginpw/userloginpw.wxss                            |   70 
 pages/mConsult/consultdetail/consultdetail.json                     |    6 
 pages/mLearn/learfile/learnfile.wxml                                |    6 
 pages/mLedger/ledgerhome/ledgerhome.wxml                            |   87 
 service/ledgerservice.js                                            |   15 
 pages/mExtra/pSupervisiontask/pSupervisiontask.json                 |    8 
 pages/mPromise/promiseresult/promiseresult.wxml                     |    5 
 pages/mUser/companyauthentication/companyauthentication.json        |    6 
 pages/mConsult/consulthome/consulthome.json                         |   10 
 pages/mLearn/learn/learn.js                                         |   81 
 pages/mConsult/cResultItemSearch/cResultItemSearch.js               |   69 
 pages/mUser/personalauthentication/personalauthentication.wxml      |   42 
 pages/mAssessment/gradedetail/gradedetail.wxml                      |   67 
 pages/mConsult/consultdetail/consultdetail.wxml                     |   37 
 pages/mConsult/consultresult/consultresult.js                       |   70 
 .cloudbase/container/debug.json                                     |    1 
 pages/mLedger/ledgerhistory/ledgerhistory.js                        |  224 
 pages/mUser/companyauthentication/companyauthentication.wxss        |   18 
 pages/mService/cSchedule/cSchedule.wxml                             |   16 
 pages/mConsult/consultdetailqa/consultdetailqa.wxss                 |  114 
 pages/mService/pDevicedata/pDevicedata.js                           |  269 +
 pages/mUser/pChangepw/pChangepw.json                                |   10 
 pages/mConsult/consultproblem/consultproblem.json                   |    9 
 pages/mPromise/promiseinfo/promiseinfo.wxss                         |   68 
 pages/mConsult/consultdetail/consultdetail.js                       |  113 
 pages/home/home.js                                                  |   73 
 pages/mConsult/consultdetailqa/consultdetailqa.json                 |   10 
 pages/mAssessment/grade/grade.json                                  |    9 
 pages/mConsult/baseC/cResultItem/cResultItem.wxml                   |  143 
 pages/mService/behaviors/bScheduleManager.js                        |  136 
 pages/mConsult/consultonline/consultonline.wxml                     |   38 
 pages/mConsult/consultresultmore/consultresultmore.wxml             |   10 
 pages/mNotice/notice/notice.wxss                                    |  103 
 pages/mUser/userregistergov/userregistergov.js                      |   17 
 pages/mConsult/behaviors/bConsultItem.js                            |  109 
 pages/mLedger/ledgerupload/ledgerupload.js                          |  133 
 pages/mService/pScheduledetail/pScheduledetail.wxss                 |   81 
 pages/mLearn/learn/learn.wxss                                       |  101 
 pages/mUser/mine/mine.json                                          |    5 
 pages/mAssessment/grade/grade.wxss                                  |   71 
 pages/mConsult/consultsearch/consultsearch.wxml                     |   28 
 pages/mConsult/cResultItemTab/cResultItemTab.wxss                   |    1 
 pages/mConsult/consultdetailitem/consultdetailitem.wxml             |   52 
 pages/mExtra/pSupervisionchange/pSupervisionchange.wxss             |   85 
 pages/home/home.wxml                                                |    3 
 pages/mConsult/consultdetailqa/consultdetailqa.js                   |  108 
 pages/mService/pDevicedata/pDevicedata.wxss                         |  109 
 pages/mUser/pSupport/pSupport.json                                  |    4 
 pages/mConsult/consulthome/consulthome.wxss                         |   54 
 component/mygallery/mygallery.js                                    |   24 
 pages/mExtra/pSupervisiontask/pSupervisiontask.wxss                 |  131 
 service/deviceservice.js                                            |   19 
 pages/mNotice/notice/notice.json                                    |    5 
 pages/mUser/userregistercompany/userregistercompany.wxss            |   43 
 base/behaviors/bUpload.js                                           |   35 
 pages/mService/pDevicedata/pDevicedata.json                         |    9 
 pages/mExtra/pSupervisionchange/pSupervisionchange.json             |    9 
 pages/mConsult/cResultItemTab/cResultItemTab.json                   |    7 
 pages/mUser/userregistercompany/userregistercompany.json            |   11 
 pages/mLearn/baseC/cLearnItem/cLearnItem.wxss                       |   27 
 pages/mConsult/consultdetailcase/consultdetailcase.wxss             |  105 
 pages/mPromise/promisesign/promisesign.wxss                         |   53 
 pages/mConsult/baseC/cResultItem/cResultItem.wxss                   |  126 
 pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.wxss |   78 
 pages/mUser/pAbout/pAbout.wxml                                      |   25 
 pages/mAssessment/assessment/assessment.wxml                        |  111 
 base/behaviors/bLoadingStatus.js                                    |   79 
 pages/mNotice/notice/notice.wxml                                    |   48 
 pages/mUser/userregistergov/userregistergov.wxss                    |    1 
 pages/m_assessment/gradereport/gradereport.js                       |    1 
 pages/mUser/behaviors/bLogin.js                                     |  118 
 pages/mPromise/promisesign/promisesign.json                         |    6 
 pages/mUser/pSupport/pSupport.wxss                                  |   53 
 pages/mConsult/consultproblem/consultproblem.wxml                   |   20 
 pages/mConsult/cResultItemSearch/cResultItemSearch.wxss             |    0 
 pages/mUser/sceneauthentication/sceneauthentication.js              |   36 
 pages/mAssessment/grade/grade.wxml                                  |   37 
 pages/mConsult/baseC/cResultItem/cResultItem.json                   |    6 
 pages/mUser/pChangepw/pChangepw.js                                  |   81 
 pages/mExtra/pSupervisionchange/pSupervisionchange.wxml             |   47 
 service/baserequest.js                                              |   29 
 pages/mConsult/cResultItemTab/cResultItemTab.wxml                   |    7 
 pages/mConsult/consultdetailitem/consultdetailitem.wxss             |   89 
 pages/mUser/companyregister/companyregister.wxml                    |    2 
 pages/mUser/userregistertype/userregistertype.json                  |    0 
 pages/mLearn/learncase/learncase.wxml                               |    8 
 pages/mLedger/ledgerhistory/ledgerhistory.wxml                      |   36 
 pages/mLearn/learfile/learnfile.json                                |    8 
 pages/mPromise/promisefile/promisefile.wxml                         |   46 
 service/taskservice.js                                              |   77 
 pages/mPromise/promisesign/promisesign.js                           |  205 
 pages/mPromise/promisefile/promisefile.js                           |  154 
 service/assessmentservice.js                                        |    6 
 pages/mService/pDevicedata/pDevicedata.wxml                         |   64 
 pages/mConsult/consulthome/consulthome.wxml                         |   41 
 pages/mUser/userregistergov/userregistergov.json                    |    0 
 pages/mLearn/learn/learn.json                                       |    9 
 pages/mUser/baseC/cCompanyInfo/cCompanyInfo.js                      |  195 
 pages/mExtra/pSupervisiontask/pSupervisiontask.wxml                 |   57 
 pages/mConsult/cResultItemSearch/cResultItemSearch.json             |    6 
 pages/mUser/userlogin/userlogin.wxml                                |   24 
 pages/text/text.js                                                  |    9 
 pages/mLearn/baseC/cLearnItem/cLearnItem.json                       |    7 
 pages/mUser/userregistertype/userregistertype.wxss                  |   28 
 pages/mUser/userloginpw/userloginpw.wxml                            |   29 
 pages/mLedger/ledgerhome/ledgerhome.js                              |  298 +
 pages/mLearn/learfile/learnfile.wxss                                |    1 
 pages/mUser/baseC/cCompanyInfo/cCompanyInfo.wxml                    |   23 
 pages/mUser/pQrcode/pQrcode.wxml                                    |    2 
 pages/mService/pServicehome/servicehome.wxml                        |   25 
 pages/mPromise/promiseinfo/promiseinfo.js                           |  276 +
 pages/mUser/companyregister/companyregister.js                      |   66 
 pages/mConsult/behaviors/bQuestions.js                              |   60 
 pages/mConsult/consultresultmore/consultresultmore.js               |   38 
 pages/mUser/pInstructions/pInstructions.json                        |    6 
 pages/mConsult/consulthome/consulthome.js                           |  101 
 pages/mPromise/promiseinfo/promiseinfo.json                         |   11 
 pages/mUser/pAbout/pAbout.js                                        |   60 
 pages/mPromise/promisehome/promise.json                             |    5 
 pages/mUser/pChangepw/pChangepw.wxss                                |    6 
 pages/mAssessment/gradedetail/gradedetail.wxss                      |   29 
 pages/mUser/pInstructions/pInstructions.wxss                        |    5 
 pages/mConsult/consultdetailcase/consultdetailcase.js               |   96 
 data/sceneInfo.js                                                   |    8 
 pages/mLearn/pLearnvideo/pLearnvideo.js                             |   85 
 pages/mUser/userregistertype/userregistertype.js                    |   35 
 pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.json |   10 
 pages/mUser/baseC/cSceneInfo/cSceneInfo.wxml                        |   42 
 pages/mLearn/learfile/learnfile.js                                  |   20 
 pages/mUser/userlogin/userlogin.js                                  |  194 
 pages/mAssessment/gradereport/gradereport.wxml                      |   58 
 pages/mConsult/consultdetailqa/consultdetailqa.wxml                 |   72 
 pages/mPromise/promisehome/promise.wxss                             |   77 
 pages/mConsult/consultdetailitem/consultdetailitem.js               |  105 
 pages/mConsult/consultdetailitem/consultdetailitem.json             |    6 
 pages/mAssessment/gradedetail/gradedetail.json                      |    6 
 pages/mUser/mine/mine.wxml                                          |  101 
 base/behaviors/bLoadingToast.js                                     |   38 
 pages/mConsult/consultsearch/consultsearch.json                     |    8 
 readme.md                                                           |    0 
 pages/mAssessment/gradereport/gradereport.js                        |  294 +
 pages/mConsult/consultresultmore/consultresultmore.wxss             |    4 
 pages/mLearn/pLearnvideo/pLearnvideo.wxml                           |   65 
 pages/mAssessment/gradereport/gradereport.json                      |    8 
 pages/mExtra/pSupervisiontask/pSupervisiontask.js                   |  170 
 pages/mConsult/behaviors/bElementTypes.js                           |  151 
 pages/mLearn/learn/learn.wxml                                       |   66 
 pages/mUser/sceneauthentication/sceneauthentication.wxss            |   18 
 pages/mLearn/behaviors/bFetch.js                                    |   60 
 pages/mService/pScheduledetail/pScheduledetail.wxml                 |   33 
 pages/mConsult/consultsearch/consultsearch.wxss                     |  124 
 pages/mUser/userloginpw/userloginpw.json                            |    0 
 base/behaviors/bInputCheck.js                                       |  200 
 pages/home/home.json                                                |    2 
 pages/mConsult/consultresult/consultresult.json                     |   10 
 pages/mAssessment/assessment/assessment.js                          |  320 +
 pages/mConsult/cResultItemTab/cResultItemTab.js                     |   43 
 pages/mConsult/consultresultmore/consultresultmore.json             |    8 
 pages/mNotice/notice/notice.js                                      |   99 
 pages/mUser/pAbout/pAbout.json                                      |    4 
 pages/mLedger/ledgerupload/ledgerupload.wxss                        |   45 
 project.private.config.json                                         |    3 
 pages/mAssessment/gradereport/gradereport.wxss                      |   67 
 pages/mUser/userregistercompany/userregistercompany.wxml            |   27 
 pages/mAssessment/gradedetail/gradedetail.js                        |   22 
 pages/mAssessment/assessment/assessment.json                        |   10 
 pages/mAssessment/grade/grade.js                                    |  252 +
 pages/mPromise/promisehome/promise.wxml                             |   35 
 pages/mConsult/consultonline/consultonline.js                       |  185 
 pages/mPromise/promisehome/promise.js                               |  161 
 pages/mService/pSchedule/pSchedule.js                               |   77 
 pages/mUser/pAbout/pAbout.wxss                                      |   45 
 pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.wxml |   47 
 pages/mPromise/promiseresult/promiseresult.wxss                     |    5 
 pages/mLedger/ledgerupload/ledgerupload.json                        |   10 
 pages/mPromise/promiseresult/promiseresult.js                       |   44 
 pages/mLedger/behaviors/bUploadLedger.js                            |   75 
 data/sceneTypes.js                                                  |   24 
 pages/mUser/mine/mine.js                                            |  172 
 pages/mUser/personalauthentication/personalauthentication.wxss      |   77 
 component/loadingstatus/loadingstatus.js                            |    4 
 pages/mConsult/behaviors/bSearch.js                                 |   53 
 pages/mPromise/promisefile/promisefile.wxss                         |   63 
 data/promise.js                                                     |    6 
 pages/mUser/companyauthentication/companyauthentication.wxml        |    6 
 pages/mService/pSchedule/pSchedule.wxml                             |   26 
 pages/mPromise/promiseresult/promiseresult.json                     |    6 
 pages/icons/icons.js                                                |    2 
 /dev/null                                                           |    0 
 pages/mConsult/consultresult/consultresult.wxss                     |   70 
 pages/mService/cSchedule/cSchedule.wxss                             |   51 
 pages/mConsult/consultdetailcase/consultdetailcase.json             |   11 
 pages/mUser/userregistertype/userregistertype.wxml                  |   13 
 pages/mUser/personalauthentication/personalauthentication.json      |   10 
 pages/mConsult/consultproblem/consultproblem.js                     |   45 
 pages/mUser/sceneauthentication/sceneauthentication.json            |    6 
 pages/mPromise/promiseinfo/promiseinfo.wxml                         |   34 
 pages/mUser/baseC/cCompanyInfo/cCompanyInfo.wxss                    |   48 
 pages/mPromise/promisefile/promisefile.json                         |   10 
 263 files changed, 13,950 insertions(+), 128 deletions(-)

diff --git a/.cloudbase/container/debug.json b/.cloudbase/container/debug.json
new file mode 100644
index 0000000..0d44458
--- /dev/null
+++ b/.cloudbase/container/debug.json
@@ -0,0 +1 @@
+{"containers":[],"config":{}}
\ No newline at end of file
diff --git a/app.json b/app.json
index a313959..a8c97df 100644
--- a/app.json
+++ b/app.json
@@ -1,56 +1,61 @@
 {
-  "entryPagePath": "pages/m_user/userlogin/userlogin",
+  "entryPagePath": "pages/mUser/userlogin/userlogin",
   "pages": [
-    "pages/m_user/userlogin/userlogin",
-    "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_consult/consulthome/consulthome",
-    "pages/m_consult/consultsearch/consultsearch",
-    "pages/m_consult/consultresult/consultresult",
-    "pages/m_consult/consultdetail/consultdetail",
-    "pages/m_consult/consultonline/consultonline",
-    "pages/m_consult/consultproblem/consultproblem",
-    "pages/m_consult/consultresultmore/consultresultmore",
-    "pages/m_consult/consultdetailitem/consultdetailitem",
-    "pages/m_consult/consultdetailqa/consultdetailqa",
-    "pages/m_consult/consultdetailcase/consultdetailcase",
-    "pages/m_learn/p_learnvideo/p_learnvideo",
-    "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_service/p_scheduledetail/p_scheduledetail",
-    "pages/m_service/p_schedule/p_schedule",
-    "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/mUser/userlogin/userlogin",
     "pages/icons/icons",
     "pages/text/text",
+    "pages/mUser/userloginpw/userloginpw",
+    "pages/home/home",
+    "pages/mAssessment/assessment/assessment",
+    "pages/mAssessment/grade/grade",
+    "pages/mAssessment/gradedetail/gradedetail",
+    "pages/mAssessment/gradereport/gradereport",
+    "pages/mConsult/consulthome/consulthome",
+    "pages/mConsult/consultsearch/consultsearch",
+    "pages/mConsult/consultresult/consultresult",
+    "pages/mConsult/consultdetail/consultdetail",
+    "pages/mConsult/consultonline/consultonline",
+    "pages/mConsult/consultproblem/consultproblem",
+    "pages/mConsult/consultresultmore/consultresultmore",
+    "pages/mConsult/consultdetailitem/consultdetailitem",
+    "pages/mConsult/consultdetailqa/consultdetailqa",
+    "pages/mConsult/consultdetailcase/consultdetailcase",
+    "pages/mLearn/pLearnvideo/pLearnvideo",
+    "pages/mLearn/learn/learn",
+    "pages/mLearn/learfile/learnfile",
+    "pages/mLearn/learncase/learncase",
+    "pages/mLedger/ledgerhome/ledgerhome",
+    "pages/mLedger/ledgerupload/ledgerupload",
+    "pages/mLedger/ledgerhistory/ledgerhistory",
+    "pages/mNotice/notice/notice",
+    "pages/mPromise/promiseinfo/promiseinfo",
+    "pages/mPromise/promisehome/promise",
+    "pages/mPromise/promisefile/promisefile",
+    "pages/mPromise/promiseresult/promiseresult",
+    "pages/mPromise/promisesign/promisesign",
+    "pages/mService/pServicehome/servicehome",
+    "pages/mService/pScheduledetail/pScheduledetail",
+    "pages/mService/pSchedule/pSchedule",
+    "pages/mUser/userregistertype/userregistertype",
+    "pages/mUser/userregistergov/userregistergov",
+    "pages/mUser/userregistercompany/userregistercompany",
+    "pages/mUser/mine/mine",
+    "pages/mUser/companyregister/companyregister",
+    "pages/mUser/companyauthentication/companyauthentication",
+    "pages/mUser/baseC/cCompanyInfo/cCompanyInfo",
+    "pages/mUser/sceneauthentication/sceneauthentication",
+    "pages/mUser/personalauthentication/personalauthentication",
+    "pages/mUser/pAbout/pAbout",
+    "pages/mUser/pChangepw/pChangepw",
+    "pages/mUser/pSupport/pSupport",
+    "pages/mUser/pInstructions/pInstructions",
+    "pages/mUser/pQrcode/pQrcode",
     "pages/test/test",
     "pages/test2/test2",
-    "pages/m_user/companyregister/companyregister",
-    "pages/m_user/companyauthentication/companyauthentication",
-    "pages/m_user/base_c/c_company-info/c_company-info",
-    "pages/m_user/sceneauthentication/sceneauthentication",
-    "pages/m_user/personalauthentication/personalauthentication",
-    "pages/m_user/p_about/p_about",
-    "pages/m_user/p_changepw/p_changepw",
-    "pages/m_user/p_support/p_support",
-    "pages/m_user/p_instructions/p_instructions"
+    "pages/mService/pDevicedata/pDevicedata",
+    "pages/mExtra/pSupervisiontask/pSupervisiontask",
+    "pages/mExtra/pSupervisionchange/pSupervisionchange",
+    "pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail"
   ],
   "window": {
     "backgroundTextStyle": "light",
@@ -69,25 +74,25 @@
         "selectedIconPath": "res/icons/tab_1_select.png"
       },
       {
-        "pagePath": "pages/m_assessment/assessment/assessment",
+        "pagePath": "pages/mAssessment/assessment/assessment",
         "text": "鑷祴鏅鸿瘎",
         "iconPath": "/res/icons/tab_2.png",
         "selectedIconPath": "res/icons/tab_2_select.png"
       },
       {
-        "pagePath": "pages/m_ledger/ledgerhome/ledgerhome",
+        "pagePath": "pages/mLedger/ledgerhome/ledgerhome",
         "text": "鍙拌处绠$悊",
         "iconPath": "/res/icons/tab_5.png",
         "selectedIconPath": "res/icons/tab_5_select.png"
       },
       {
-        "pagePath": "pages/m_promise/promisehome/promise",
+        "pagePath": "pages/mPromise/promisehome/promise",
         "text": "瀹堟硶鎵胯",
         "iconPath": "/res/icons/tab_3.png",
         "selectedIconPath": "res/icons/tab_3_select.png"
       },
       {
-        "pagePath": "pages/m_user/mine/mine",
+        "pagePath": "pages/mUser/mine/mine",
         "text": "鎴戠殑",
         "iconPath": "/res/icons/tab_4.png",
         "selectedIconPath": "res/icons/tab_4_select.png"
diff --git a/app.wxss b/app.wxss
index 40ab536..963d493 100644
--- a/app.wxss
+++ b/app.wxss
@@ -3,9 +3,13 @@
 
 page {
   --fyui-primary-color: #59D5B3;
+  --fyui-primary-color-2: #6DF1A9;
+  /* --fyui-primary-color: #929292;
+  --fyui-primary-color-2: #b8b8b8; */
   --fyui-text-color_1: #3a3a3a;
   --fyui-text-color_2: #666666;
   --fyui-text-color_3: #B2B2B2;
+  --fyui-btn-color_1: #c44e00;
   --fyui-BG_1: #F5F5F5;
   --fyui-BG-COLOR-ACTIVE: #ececec5d;
 }
@@ -57,7 +61,7 @@
 
 .icon-down {
   transform: rotate(90deg);
-  margin: 0 4px;
+  margin: 0 2px;
 }
 
 .fyui-mask {
@@ -72,7 +76,7 @@
 
 .submit {
   border-radius: 4px;
-  background: linear-gradient(to right, #6DF1A9, #62EBCF);
+  background: linear-gradient(to right, var(--fyui-primary-color-2), var(--fyui-primary-color));
   margin: 8px;
   color: white;
   padding: 8px;
diff --git a/base/behaviors/bInputCheck.js b/base/behaviors/bInputCheck.js
new file mode 100644
index 0000000..8a1a48c
--- /dev/null
+++ b/base/behaviors/bInputCheck.js
@@ -0,0 +1,200 @@
+/**
+ * 淇℃伅杈撳叆閫昏緫
+ * 鍖呮嫭杈撳叆淇℃伅瀛樺偍銆佽緭鍏ヨ鑼冩�ф娴嬨�侀敊璇彁绀虹瓑
+ * @see "/data/sceneInfo.js"
+ */
+module.exports = Behavior({
+  data: {
+    msg: [],
+    info: {}
+  },
+  lifetimes: {
+    attached: function () {}
+  },
+  methods: {
+    selectChange(e) {
+      const index = e.currentTarget.dataset.index
+      const options = e.detail.options
+      this.setData({
+        [`msg[${index}].options`]: options
+      })
+    },
+
+    pickerChange(e) {
+      console.log(e);
+      const {
+        index,
+        mode
+      } = e.currentTarget.dataset
+      if (mode == 'region') {
+        const i = e.detail.value.concat(e.detail.code)
+        this.setData({
+          [`msg[${index}].value`]: i
+        })
+      } else if (mode == 'selector') {
+        const i = e.detail.value
+        this.setData({
+          [`msg[${index}].selectIndex`]: i,
+          [`msg[${index}].value`]: this.data.msg[index].options[i].value
+        })
+      }
+    },
+
+    changeMsg(e) {
+      let id = e.detail.params.id
+      let value = e.detail.params.value
+      let msg = this.data.msg
+      let msgLength = msg.length
+      for (let i = 0; i < msgLength; i++) {
+        if (msg[i].id === id) {
+          let path = "msg[" + i + "].value"
+          let nPath = "msg[" + i + "].noValue"
+          this.setData({
+            [path]: value,
+            [nPath]: false
+          })
+        }
+      }
+    },
+
+    /**
+     * 淇℃伅瀹屾暣搴︽鏌�
+     */
+    submitCheck() {
+      //娓呯┖缂撳瓨鐨勫瘑鐮�
+      this.lastPW = ''
+
+      let msg = this.data.msg
+      //纭淇℃伅瀹屾暣搴�
+      for (let i = 0; i < msg.length; i++) {
+        const m = msg[i]
+        //閫夊~椤圭洿鎺ョ暐杩�
+        if (m.required == false) continue
+        //澶嶉�夋鍜屽崟閫夋锛堝閫夋鐨勯�昏緫鍖呭惈浜嗗崟閫夋锛�
+        if (m.type == 'checkbox' || m.type == 'radio') {
+          // console.log('m.options', m.options);
+          m.value = ''
+          for (let t = 0; t < m.options.length; t++) {
+            const o = m.options[t];
+            if (o.checked) {
+              if (m.value != '') {
+                m.value += ';'
+              }
+              if (o.hasRemark) {
+                // console.log('o.remark', o.remark);
+                if (o.remark == '') {
+                  this.setData({
+                    [`msg[${i}].options[${t}].noValue`]: true
+                  })
+                  this.showErrorMsg(i, '澶囨敞淇℃伅涓嶈兘涓虹┖')
+                  return false
+                } else {
+                  m.value += o.remark
+                }
+              } else {
+                m.value += o.name
+              }
+            }
+          }
+          if (m.value == '') {
+            this.showErrorMsg(i)
+            return false
+          }
+        }
+        //涓嬫媺閫夋嫨妗�
+        else if (m.type == 'picker') {
+          if (m.pickerMode == 'selector') {
+            if (m.selectIndex == 0) {
+              this.showErrorMsg(i, `${this.data.msg[i].name}鏈�夋嫨`)
+              return false
+            } else {
+              m.value = m.options[m.selectIndex].name
+            }
+          } else if (m.pickerMode == 'region') {
+            if (m.value.length == 0) {
+              this.showErrorMsg(i, `${this.data.msg[i].name}鏈�夋嫨`)
+              return false
+            }
+          }
+        }
+        //杈撳叆妗�
+        //蹇呭~椤圭┖鐧芥娴�
+        else if (m.value === "" || m.value === null || m.value === undefined) {
+          this.showErrorMsg(i)
+          return false
+        } 
+        //杈撳叆妗嗕笅鐨勫瘑鐮佺被鍨嬫娴�
+        else if (m.type == 'password') {
+          //瀵嗙爜涓�鑷存�х‘璁�
+          if (this.lastPW == '') {
+            this.lastPW = m.value
+          } else if (this.lastPW != m.value) {
+            let error = "涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�"
+            this.setData({
+              errorMsg: error,
+            })
+            return false
+          }
+          //瀵嗙爜澶嶆潅搴︾‘璁�
+          var pwError
+          var pw = m.value
+          var regex1 = /[a-zA-Z]/
+          var regex2 = /[0-9]/
+          var r = regex1.test(pw) && regex2.test(pw)
+          console.log('regex:' + r);
+          if (pw.length < 6) {
+            pwError = '瀵嗙爜浣嶆暟鏈�灏�6浣�'
+          } else if (!r) {
+            pwError = '瀵嗙爜蹇呴』鍖呭惈瀛楁瘝鍜屾暟瀛�'
+          }
+          if (pwError) {
+            this.setData({
+              errorMsg: pwError,
+            })
+            return false
+          }
+          
+        }
+      }
+
+      return true
+    },
+
+    showErrorMsg(index, err = `${this.data.msg[index].name}涓嶅彲涓虹┖`) {
+      this.setData({
+        errorMsg: err,
+        [`msg[${index}].noValue`]: true
+      })
+      const id = "#" + this.data.msg[index].id
+      wx.createSelectorQuery().select('.page').boundingClientRect(res1 => {
+        const top1 = res1.top
+        wx.createSelectorQuery().in(this).select(id).boundingClientRect(res => {
+          const h = res.top - top1 - 60
+          // console.log(h);
+          wx.pageScrollTo({
+            // duration: 300,
+            scrollTop: h,
+            // selector: id,
+            // offsetTop: -60,
+          })
+        }).exec();
+      }).exec();
+    },
+
+    onSubmit: function () {
+      console.log('onSubmit');
+      if (!this.submitCheck()) return
+
+      let msg = this.data.msg
+      if (msg) {
+        const info = this.data.info
+        msg.forEach(m => {
+          info[m.id] = m.value
+        });
+        this.setData({info})
+        this.triggerEvent('onSubmit', info)
+        if (typeof this._submit === 'function') this._submit(info)
+      }
+    },
+  }
+})
\ No newline at end of file
diff --git a/base/behaviors/bLoadingStatus.js b/base/behaviors/bLoadingStatus.js
new file mode 100644
index 0000000..600188c
--- /dev/null
+++ b/base/behaviors/bLoadingStatus.js
@@ -0,0 +1,79 @@
+/**
+ * 鏁版嵁鍔犺浇鐘舵�佺洃鍚�
+ * @see './bLoadingToast.js' 鍜� '../../component/loadingstatus'
+ */
+module.exports = Behavior({
+  data: {
+    cPage: 1,
+    tPage: 1,
+    perPage: 10,
+    totalCount: 0,
+    loading: false,
+    needLoadMore: false,
+    timeout: false
+  },
+  timeoutId: '',
+  lastLoading: false,
+  observers: {
+    'loading': function (loading) {
+      if (this.lastLoading == loading) return
+      if (loading) {
+        clearTimeout(this.timeoutId)
+        this._loadStart()
+        this._loading()
+        this.timeoutId = setTimeout(() => { 
+          this.setData({
+            loading: false,
+            timeout: true
+          })
+        }, 10000);
+      } else {
+        clearTimeout(this.timeoutId)
+        this._loadComplete()
+      }
+      this.lastLoading = loading
+    },
+    '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/base/behaviors/bLoadingToast.js b/base/behaviors/bLoadingToast.js
new file mode 100644
index 0000000..28646fa
--- /dev/null
+++ b/base/behaviors/bLoadingToast.js
@@ -0,0 +1,38 @@
+/**
+ * 鏁版嵁鍔犺浇寮圭獥
+ * 鏍规嵁鍔犺浇鐘舵�侊紝灞曠ず瀵瑰簲鐨勫脊绐�
+ * @see './bLoadingStatus.js'
+ */
+module.exports = Behavior({
+  data: {
+    loadingText: '鍔犺浇涓�',
+    loadCompleteText: '鍔犺浇瀹屾垚',
+    timeoutText: '鍔犺浇瓒呮椂'
+  },
+  methods: {
+    // 鍔犺浇寮�濮媡oast
+    loadStart() {
+      wx.showLoading({
+        title: this.data.loadingText,
+        mask: true,
+      })
+    },
+    // 鍔犺浇涓璽oast
+    loading() {
+      
+    },
+    // 鍔犺浇瀹屾垚toast
+    loadComplete() {
+      wx.hideLoading({
+        success: (res) => {
+          wx.showToast({
+            title: this.data.timeout ? this.data.timeoutText : this.data.loadCompleteText,
+            duration: 1000,
+            icon: this.data.timeout ? 'error' : 'success',
+            mask: true,
+          })
+        },
+      })
+    },
+  }
+})
\ No newline at end of file
diff --git a/base/behaviors/bUpload.js b/base/behaviors/bUpload.js
new file mode 100644
index 0000000..24957a8
--- /dev/null
+++ b/base/behaviors/bUpload.js
@@ -0,0 +1,35 @@
+/**
+ * 鍥剧墖涓婁紶绠$悊
+ */
+module.exports = Behavior({
+  data: {
+    imgFiles: [],
+  },
+  lifetimes: {
+    attached: function () {}
+  },
+  methods: {
+    uploadFile(file) {
+      let data = file.detail.newFiles
+      console.log(data);
+      data.forEach(element => {
+        element.loading = false
+      });
+      this.setData({
+        imgFiles: data
+      })
+    },
+    /**
+     * 鐩戝惉鍥剧墖鍒犻櫎鍔ㄤ綔
+     */
+    delImg(e) {
+      let imgIndex = e.detail.index
+      let imgFiles = this.data.imgFiles
+      imgFiles.splice(imgIndex, 1)
+      this.setData({
+        imgFiles
+      })
+      console.log(imgFiles);
+    },
+  }
+})
\ No newline at end of file
diff --git a/component/loadingstatus/loadingstatus.js b/component/loadingstatus/loadingstatus.js
index f450855..e72da3f 100644
--- a/component/loadingstatus/loadingstatus.js
+++ b/component/loadingstatus/loadingstatus.js
@@ -1,8 +1,8 @@
 // component/loadingstatus/loadingstatus.js
 /**
  * 鍔犺浇鐘舵�佺粍浠�
- * 閰嶅悎 b_loadingStatus 浣跨敤
- * @see '/base/behaviors/b_loadingStatus.js'
+ * 閰嶅悎 bLoadingStatus 浣跨敤
+ * @see '/base/behaviors/bLoadingStatus.js'
  */
 Component({
   options: {
diff --git a/component/mygallery/mygallery.js b/component/mygallery/mygallery.js
index 08bf58c..948c72f 100644
--- a/component/mygallery/mygallery.js
+++ b/component/mygallery/mygallery.js
@@ -33,8 +33,8 @@
           let query = this.createSelectorQuery().in(this); //蹇呴』瑕佸厛鍒涘缓涓�涓煡璇�
           setTimeout(() => {
             query.select('.fyui-gallery__img').boundingClientRect(function (rect) {
-              console.log('observer');
-              console.log(rect);
+              // console.log('observer');
+              // console.log(rect);
               that.setData({
                 imgHeight: rect.height,
                 imgWidth: rect.width,
@@ -195,8 +195,8 @@
 
     touchStart(e) {
       const touches = e.touches
-      console.log('touchStart:');
-      console.log(touches);
+      // console.log('touchStart:');
+      // console.log(touches);
       const { translateX, translateY } = this.data
       const { clientX, clientY } = touches[0]
       this.setData({
@@ -211,7 +211,7 @@
     },
     
     touchMove(e) {
-      console.log('touchMove:');
+      // console.log('touchMove:');
       const touches = e.touches
       const { clientX: onePageX, clientY: onePageY } = touches[0]
       const { startMove, scale, distance: oldDistance, startTouches, oldRotate  } = this.data
@@ -259,7 +259,7 @@
       return Math.atan2(y, x) * 180 / Math.PI
     },
     touchEnd() {
-      console.log('touchEnd:');
+      // console.log('touchEnd:');
       // 淇濆瓨褰撳墠鏃嬭浆瑙掑害锛屾竻绌哄弻鎸囪窛绂�
       const oldRotate = this.data.rotate
       this.setData({ 
@@ -294,16 +294,16 @@
         xLimit,
         yLimit
       })
-      console.log('yLimit');
-      console.log(yLimit);
+      // console.log('yLimit');
+      // console.log(yLimit);
 
       let that = this;
       let query = this.createSelectorQuery().in(this); //蹇呴』瑕佸厛鍒涘缓涓�涓煡璇�
       query.select('.fyui-gallery__img').boundingClientRect(function (rect) {
-        console.log('imgHeight:' + that.data.imgHeight);
-        console.log('imgWidth:' + that.data.imgWidth);
-        console.log(rect);
-        console.log('endScale:' + that.data.endScale);
+        // console.log('imgHeight:' + that.data.imgHeight);
+        // console.log('imgWidth:' + that.data.imgWidth);
+        // console.log(rect);
+        // console.log('endScale:' + that.data.endScale);
       }).exec();
 
       // 缂╂斁鍚庡洖褰掕嚦褰撳墠绉诲姩浣嶇疆
diff --git a/data/promise.js b/data/promise.js
index d458e44..a6a0340 100644
--- a/data/promise.js
+++ b/data/promise.js
@@ -1,4 +1,4 @@
-const text = "涓鸿返琛岀豢鑹插彂灞曠悊蹇碉紝鍔姏钀ラ�犺瘹瀹炲畧淇$殑绀句細鐜锛岃惤瀹炴柦宸ュ崟浣嶇幆淇濊矗浠伙紝闄嶄綆鍥犵幆澧冪瓑鍥犵礌閫犳垚鐨勬壃灏樻薄鏌撻殣鎮e拰灞呮皯绾犵悍锛岀‘淇濆缓绛戜笟鍋ュ悍鏈夊簭鍙戝睍锛屾湰鍗曚綅锛堟垨鏈汉锛夎嚜鎰夸綔鍑哄涓嬫壙璇猴細\n\n涓�銆佷弗鏍奸伒瀹堝浗瀹躲�佸競銆佸尯鏈夊叧鐜淇濇姢娉曞緥銆佹硶瑙勩�佽绔犮�佹爣鍑嗗拰鏀跨瓥瑙勫畾锛岀Н鏋佸饱琛岀幆澧冧繚鎶ょぞ浼氳矗浠汇�俓n\n浜屻�佷互銆婁笂娴峰競鐜淇濇姢鏉′緥銆嬨�併�婁笂娴峰競澶ф皵姹℃煋闃叉不鏉′緥銆嬨�併�婁笂娴峰競寤鸿宸ョ▼鏂囨槑鏂藉伐绠$悊瑙勫畾銆嬬瓑瑕佹眰涓轰緷鎹紝绉戝鍒跺畾寤鸿宸ュ湴鎵皹姹℃煋闃叉不鏂规骞跺叕绀猴紝寤虹珛鍋ュ叏浼佷笟鍐呴儴鎵皹闃叉不鏍告煡鏈哄埗锛屽畨鎺掍笓浜鸿礋璐f壃灏橀槻娌讳簨瀹滐紝鍙婃椂璁板綍銆佷繚瀛樿溅杈嗚繘鍑恒�佸啿娲椼�佹磼姘寸瓑鐜繚鍙拌处銆俓n\n涓夈�佸缓璁炬柦宸ュ簲绗﹀悎銆婃枃鏄庢柦宸ユ爣鍑嗐�嬶紙DG/TJ 08-2102-2019 )锛岀瀛﹂厤缃壃灏橀槻娌昏鏂借澶囷紙楂樺帇鍐叉礂璁惧銆佽嚜鍔ㄥ柗娣嬭缃�侀浘鐐溅銆佹磼姘磋溅绛夛級锛屼緷鎵樻妧闃叉帾鏂藉紑灞曠豢鑹叉柦宸ワ紝骞跺姞寮哄鍣0鎺у埗銆佸厜姹℃煋鎺у埗銆佸己鑵愯殌鎬у寲瀛﹀搧绛夊叾浠栨薄鏌撴帶鍒讹紝闃叉瀵瑰懆杈瑰眳姘戦�犳垚鐢熸椿鐜姹℃煋銆俓n\n鍥涖�佷弗鏍兼墽琛屾壃灏樻不鐞嗗叚涓櫨鍒嗙櫨瑕佹眰锛�1銆佹柦宸ュ伐鍦板懆杈�100%鍥存尅锛�2銆佸嚭鍏ヨ溅杈�100%鍐叉礂锛�3銆佹媶杩佸伐鍦�100%婀挎硶浣滀笟锛�4銆佹福鍦熻溅杈�100%瀵嗛棴杩愯緭锛�5銆佹柦宸ョ幇鍦哄湴闈�100%纭寲锛�6銆佺墿鏂欏爢鏀�100%瑕嗙洊銆俓n\n浜斻�侀伒瀹堝叧浜庡嵃鍙戙�婁笂娴峰競鎴垮眿寤虹瓚宸ュ湴鎵皹姹℃煋闃叉不宸ヤ綔鏂规銆嬬殑閫氱煡 锛堟勃寤鸿川瀹夎仈銆�2019銆�208 鍙� 锛夌浉鍏宠瀹氾紝瀹夎甯備綇鎴垮煄涔″缓璁剧鐞嗗鍜屽競鐢熸�佺幆澧冨眬瀹樻柟缃戠珯鍏ず鍏憡鏍忎腑鏈�鏂板叕甯冪殑鍚堟牸渚涘簲鍟嗘彁渚涚殑鎵皹鍦ㄧ嚎鐩戞祴璁惧锛岄』绗﹀悎銆婁笂娴峰競寤虹瓚鏂藉伐棰楃矑鐗╀笌鍣0鍦ㄧ嚎鐩戞祴鎶�鏈鑼冦�嬶紝濮旀墭瑙勮寖鏈嶅姟鍗曚綅瀹氭湡杩愮淮锛屽強鏃惰褰曠浉鍏冲彴璐︼紝纭繚鍏舵甯镐娇鐢紱璁惧鎷嗛櫎銆佺Щ鍔ㄦ垨鍋滆繍椤绘彁鍓嶅悜涓荤閮ㄩ棬鐢宠鎴栧妗堛�俓n\n鍏�佹壃灏樺湪绾跨洃娴嬭澶囧畨瑁呭悗椤荤‘淇濈ǔ瀹氳繍琛岋紝骞跺強鏃朵笌鐢熸�佺幆澧冮儴闂ㄦ补鐑熺洃鎺х郴缁熻仈缃戯紝渚濇嵁銆婁笂娴峰競鎵皹鍦ㄧ嚎鐩戞祴鏁版嵁鎵ф硶搴旂敤瑙勫畾銆嬪畾鏈熷鏍哥洃娴嬫暟鎹紝涓嶈秴鏍囨帓鏀撅紱鎵皹鐩戞祴鏁版嵁鍧氬喅涓嶅紕铏氫綔鍋囷紝涓嶈Е鐘�婄幆澧冪洃娴嬫暟鎹紕铏氫綔鍋囪涓哄垽瀹氬強澶勭悊鍔炴硶銆嬨�俓n\n涓冦�佷笉浣跨敤鏈笂鐜繚鎷嶇収鐨勯潪閬撹矾鏈烘锛屼笉浣跨敤闈炴硶娓犻亾鎴栦笉杈炬爣鏌存补銆俓n\n鍏�佸悓鎰忔湰鎵胯鍚戠ぞ浼氬叕寮�锛屽苟鑷鎺ュ彈鏀垮簻銆佽涓氱粍缁囥�佷富绠¢儴闂ㄥ鎵樼涓夋柟鐩戠鍗曚綅銆佺ぞ浼氬叕浼椼�佹柊闂昏垎璁虹殑鐩戠潱銆�"
+const text = "涓鸿返琛岀豢鑹插彂灞曠悊蹇碉紝鍔姏钀ラ�犺瘹瀹炲畧淇$殑绀句細鐜锛岃惤瀹炴柦宸ュ崟浣嶇幆淇濊矗浠伙紝闄嶄綆鍥犵幆澧冪瓑鍥犵礌閫犳垚鐨勬壃灏樻薄鏌撻殣鎮e拰灞呮皯绾犵悍锛岀‘淇濆缓绛戜笟鍋ュ悍鏈夊簭鍙戝睍锛屾湰鍗曚綅锛堟垨鏈汉锛夎嚜鎰夸綔鍑哄涓嬫壙璇猴細\n\n涓�銆佷弗鏍奸伒瀹堝浗瀹躲�佸競銆佸尯鏈夊叧鐜淇濇姢娉曞緥銆佹硶瑙勩�佽绔犮�佹爣鍑嗗拰鏀跨瓥瑙勫畾锛岀Н鏋佸饱琛岀幆澧冧繚鎶ょぞ浼氳矗浠汇�俓n\n浜屻�佷互銆婁笂娴峰競鐜淇濇姢鏉′緥銆嬨�併�婁笂娴峰競澶ф皵姹℃煋闃叉不鏉′緥銆嬨�併�婁笂娴峰競寤鸿宸ョ▼鏂囨槑鏂藉伐绠$悊瑙勫畾銆嬬瓑瑕佹眰涓轰緷鎹紝绉戝鍒跺畾寤鸿宸ュ湴鎵皹姹℃煋闃叉不鏂规骞跺叕绀猴紝寤虹珛鍋ュ叏浼佷笟鍐呴儴鎵皹闃叉不鏍告煡鏈哄埗锛屽畨鎺掍笓浜鸿礋璐f壃灏橀槻娌讳簨瀹滐紝鍙婃椂璁板綍銆佷繚瀛樿溅杈嗚繘鍑恒�佸啿娲椼�佹磼姘寸瓑鐜繚鍙拌处銆俓n\n涓夈�佸缓璁炬柦宸ュ簲绗﹀悎銆婃枃鏄庢柦宸ユ爣鍑嗐�嬶紙DG/TJ 08-2102-2019 )锛岀瀛﹂厤缃壃灏橀槻娌昏鏂借澶囷紙楂樺帇鍐叉礂璁惧銆佽嚜鍔ㄥ柗娣嬭缃�侀浘鐐溅銆佹磼姘磋溅绛夛級锛屼緷鎵樻妧闃叉帾鏂藉紑灞曠豢鑹叉柦宸ワ紝骞跺姞寮哄鍣0鎺у埗銆佸厜姹℃煋鎺у埗銆佸己鑵愯殌鎬у寲瀛﹀搧绛夊叾浠栨薄鏌撴帶鍒讹紝闃叉瀵瑰懆杈瑰眳姘戦�犳垚鐢熸椿鐜姹℃煋銆俓n\n鍥涖�佷弗鏍兼墽琛屾壃灏樻不鐞嗗叚涓櫨鍒嗙櫨瑕佹眰锛�1銆佹柦宸ュ伐鍦板懆杈�100%鍥存尅锛�2銆佸嚭鍏ヨ溅杈�100%鍐叉礂锛�3銆佹媶杩佸伐鍦�100%婀挎硶浣滀笟锛�4銆佹福鍦熻溅杈�100%瀵嗛棴杩愯緭锛�5銆佹柦宸ョ幇鍦哄湴闈�100%纭寲锛�6銆佺墿鏂欏爢鏀�100%瑕嗙洊銆俓n\n浜斻�侀伒瀹堝叧浜庡嵃鍙戙�婁笂娴峰競鎴垮眿寤虹瓚宸ュ湴鎵皹姹℃煋闃叉不宸ヤ綔鏂规銆嬬殑閫氱煡 锛堟勃寤鸿川瀹夎仈銆�2019銆�208 鍙� 锛夌浉鍏宠瀹氾紝瀹夎甯備綇鎴垮煄涔″缓璁剧鐞嗗鍜屽競鐢熸�佺幆澧冨眬瀹樻柟缃戠珯鍏ず鍏憡鏍忎腑鏈�鏂板叕甯冪殑鍚堟牸渚涘簲鍟嗘彁渚涚殑鎵皹鍦ㄧ嚎鐩戞祴璁惧锛岄』绗﹀悎銆婁笂娴峰競寤虹瓚鏂藉伐棰楃矑鐗╀笌鍣0鍦ㄧ嚎鐩戞祴鎶�鏈鑼冦�嬶紝濮旀墭瑙勮寖鏈嶅姟鍗曚綅瀹氭湡杩愮淮锛屽強鏃惰褰曠浉鍏冲彴璐︼紝纭繚鍏舵甯镐娇鐢紱璁惧鎷嗛櫎銆佺Щ鍔ㄦ垨鍋滆繍椤绘彁鍓嶅悜涓荤閮ㄩ棬鐢宠鎴栧妗堛�俓n\n鍏�佹壃灏樺湪绾跨洃娴嬭澶囧畨瑁呭悗椤荤‘淇濈ǔ瀹氳繍琛岋紝骞跺強鏃朵笌鐢熸�佺幆澧冮儴闂ㄦ壃灏樼洃鎺х郴缁熻仈缃戯紝渚濇嵁銆婁笂娴峰競鎵皹鍦ㄧ嚎鐩戞祴鏁版嵁鎵ф硶搴旂敤瑙勫畾銆嬪畾鏈熷鏍哥洃娴嬫暟鎹紝涓嶈秴鏍囨帓鏀撅紱鎵皹鐩戞祴鏁版嵁鍧氬喅涓嶅紕铏氫綔鍋囷紝涓嶈Е鐘�婄幆澧冪洃娴嬫暟鎹紕铏氫綔鍋囪涓哄垽瀹氬強澶勭悊鍔炴硶銆嬨�俓n\n涓冦�佷笉浣跨敤鏈笂鐜繚鎷嶇収鐨勯潪閬撹矾鏈烘锛屼笉浣跨敤闈炴硶娓犻亾鎴栦笉杈炬爣鏌存补銆俓n\n鍏�侀伒瀹�2022骞�6鏈�5鏃ヨ捣鏂借鐨勩�婁腑鍗庝汉姘戝叡鍜屽浗鍣0姹℃煋闃叉不娉曘�嬶紝瑙勮寖寮�灞曞缓绛戞柦宸ュ櫔澹版薄鏌撻槻娌伙紱娑夊強澶滈棿鏂藉伐鐨勶紝搴旈伒瀹堛�婁笂娴峰競寤鸿宸ョ▼澶滈棿鏂藉伐璁稿彲鍜屽妗堝鏌ョ鐞嗗姙娉曘�嬶紝鏂藉伐杩囩▼涓簲閲囧彇鏈夋晥鐨勯檷鍣帾鏂斤紝閬垮厤鍣0鎵版皯銆俓n\n涔濄�佸悓鎰忔湰鎵胯鍚戠ぞ浼氬叕寮�锛屽苟鑷鎺ュ彈鏀垮簻銆佽涓氱粍缁囥�佷富绠¢儴闂ㄥ鎵樼涓夋柟鐩戠鍗曚綅銆佺ぞ浼氬叕浼椼�佹柊闂昏垎璁虹殑鐩戠潱銆�"
 
 const promise = {
   '1': "涓鸿返琛岀豢鑹插彂灞曠悊蹇碉紝鍔姏钀ラ�犺瘹瀹炲畧淇$殑绀句細鐜锛岃惤瀹為楗崟浣嶇幆淇濊矗浠�,闄嶄綆鍥犵幆澧冪瓑鍥犵礌閫犳垚鐨勯鍝佸畨鍏ㄩ殣鎮e拰灞呮皯绾犵悍锛岀‘淇濋楗笟鍋ュ悍鏈夊簭鍙戝睍锛屾湰鍗曚綅(鎴栨湰浜�)鑷効浣滃嚭濡備笅鎵胯: \n\n涓�銆佷弗鏍奸伒瀹堝浗瀹躲�佸競銆佸尯鏈夊叧鐜淇濇姢娉曞緥銆佹硶瑙勩�佽绔犮�佹爣鍑嗗拰鏀跨瓥瑙勫畾,鍧氭寔瀹堟硶鐢熶骇缁忚惀, 绉瀬灞ヨ鐜淇濇姢绀句細璐d换銆俓n\n浜屻�佸竷灞�鍜屽缓璁剧鍚堝煄甯傛�讳綋瑙勫垝銆佸競瀹圭殑鐩稿叧瑕佹眰锛屼笉鍦ㄤ互涓嬪尯鍩熸柊寤恒�佹敼寤恒�佹墿寤轰骇鐢熸补鐑熴�佸紓鍛炽�佸簾姘旂殑椁愰ギ鏈嶅姟椤圭洰:灞呮皯浣忓畢妤笺�佹湭閰嶅璁剧珛涓撶敤鐑熼亾鐨勫晢浣忔ゼ浠ュ強鍟嗕綇妤间笌灞呬綇灞傜浉閭荤殑妤煎眰銆俓n\n涓夈�佸畨瑁呮补鐑熷噣鍖栧拰寮傚懗澶勭悊璁炬柦锛屾补鐑熸帓鏀炬祿搴︾鍚堛�婁笂娴峰競椁愰ギ涓氭补鐑熸帓鏀炬爣鍑嗐��(DB 31/844-2014)锛屽苟濮旀墭瑙勮寖鏈嶅姟鍗曚綅鍙傜収銆婃帓娌圭儫璁炬柦娓呮礂鎶�鏈鑼冦��(T/SHXFXH 002-2021)瀹氭湡杩涜缁存姢娓呮礂锛屽強鏃惰褰曠浉鍏冲彴璐︼紝纭繚鍏舵甯镐娇鐢紝闃叉瀵瑰懆杈瑰眳姘戦�犳垚鐢熸椿鐜姹℃煋銆俓n\n鍥涖�佸畨瑁呯鍚堛�奀CAEPI-RG-Y-020-2011銆嬬殑娌圭儫鍦ㄧ嚎鐩戞祴瑁呯疆锛屾牴鎹�婇楗补鐑熷湪绾跨洃娴嬶紙鍏夋暎灏勬硶锛変笌鐩戞帶鎶�鏈鑼冦��(T/SHAEPI 003-2022)锛屽強鏃朵笌鐢熸�佺幆澧冮儴闂ㄦ补鐑熺洃鎺ф暟鎹钩鍙拌仈缃戯紝濮旀墭瑙勮寖鏈嶅姟鍗曚綅瀹氭湡杩愮淮锛屽強鏃惰褰曠浉鍏冲彴璐︼紝纭繚鍏舵甯镐娇鐢紝涓嶈秴鏍囨帓鏀俱�俓n\n浜斻�佸噣鍖栬缃鏈恒�佺┖璋冨鏈哄畨瑁呬綅缃敖閲忚繙绂讳綇鎴凤紝鍋氬ソ闅斿櫔銆侀檷鍣帾鏂斤紝鏄奸棿<60dB銆� 澶滈棿<50aB锛� 纭繚涓嶅櫔澹版壈姘戙�俓n\n鍏�佷笉鍦ㄧ姝㈢殑鍖哄煙(鍦ㄥ綋鍦颁汉姘戞斂搴滅姝㈢殑鏃舵鍜屽尯鍩�)鍐呴湶澶╃儳鐑ら鍝併�俓n\n涓冦�佸湪灞呮皯鍖哄唴浠庝簨椁愰ギ鏈嶅姟锛屼繚璇佷笉鍥犵幆澧冨洜绱犲奖鍝嶅懆鍥村眳姘戞甯哥敓娲伙紝涓�鏃﹀洜鎵版皯绛夐棶棰樺嚭鐜扮殑绾犵悍鐢辨湰鍗曚綅鑷璐熻矗鍗忓晢瑙h瘈骞剁珛鍗虫暣鏀广�俓n\n鍏�佸悓鎰忔湰鎵胯鍚戠ぞ浼氬叕寮�锛屽苟鑷鎺ュ彈鏀垮簻銆佽涓氱粍缁囥�佷富绠¢儴闂ㄥ鎵樼涓夋柟鐩戠鍗曚綅銆佺ぞ浼氬叕浼椼�佹柊闂昏垎璁虹殑鐩戠潱銆�",
@@ -7,7 +7,7 @@
   '4': text,
   '5': text,
   '6': text,
-  '7': "涓鸿返琛岀豢鑹插彂灞曠悊蹇碉紝鍔姏钀ラ�犺瘹瀹炲畧淇$殑绀句細鐜锛岃惤瀹炴苯淇崟浣嶇幆淇濊矗浠伙紝闄嶄綆鍥犵幆澧冪瓑鍥犵礌閫犳垚鐨勬苯淇畨鍏ㄩ殣鎮e拰灞呮皯绾犵悍锛岀‘淇濇苯淇笟鍋ュ悍鏈夊簭鍙戝睍锛屾湰鍗曚綅锛堟垨鏈汉锛夎嚜鎰夸綔鍑哄涓嬫壙璇猴細\n\n涓�銆佷弗鏍奸伒瀹堝浗瀹躲�佸競銆佸尯鏈夊叧鐜淇濇姢娉曞緥銆佹硶瑙勩�佽绔犮�佹爣鍑嗗拰鏀跨瓥瑙勫畾锛屽潥鎸佸畧娉曠敓浜х粡钀ワ紝绉瀬灞ヨ鐜淇濇姢绀句細璐d换銆俓n\n浜屻�佸缓绔嬪仴鍏ㄧ鐞嗗埗搴︼紝鍔犲己鏃ュ父绠$悊锛屽缓绔嬪嵄闄╁簾鐗╁彴璐﹀拰绠$悊璁″垝銆佹薄鏌撻槻娌昏鏂借繍琛岀鐞嗗彴璐︼紝钀藉疄鐜鐩戞祴绛夊悇椤硅姹傦紝钀藉疄鍚勭被鐜椋庨櫓闃茶寖鎺柦銆俓n\n涓夈�佹礂杞﹀簾姘淬�佺淮淇尯鍩熷満鍦板啿娲楀簾姘村叏閮ㄦ敹闆嗭紝缁忎笁绾ф矇鐮傞殧娌规睜澶勭悊鍚庣撼绠℃帓鏀俱�傚簾娌广�佸喎鍐绘恫銆佹鼎婊戞补鍙婇浂閮ㄤ欢鐨勬竻娲楀簾娑层�佹矇娣�娌规偿绛夊崟鐙敹闆嗗洖鏀讹紝绂佹鎺掑叆涓嬫按绯荤粺銆俓n\n鍥涖�佹秹鍙婂柗娑傜瓑浜х敓搴熸皵鎺掓斁鐨勶紝椤诲畨瑁匳OCs澶勭悊璁炬柦锛屾帓鏀剧殑鍚勭被澶ф皵姹℃煋鐗╁簲杈惧埌銆婂ぇ姘旀薄鏌撶墿缁煎悎鎺掓斁鏍囧噯銆嬶紙DB31/933-2015锛夎瀹氱殑鎺掓斁闄愬�艰姹傘�傚簾姘斿噣鍖栬缃畾鏈熺淮鎶わ紝骞跺畾鏈熸洿鎹㈢浉搴旇�楁潗锛堟椿鎬х偔銆佽繃婊ゆ绛夛級锛屽強鏃惰褰曠浉鍏冲彴璐︼紝纭繚鍏舵甯镐娇鐢紝闃叉瀵瑰懆杈瑰眳姘戦�犳垚鐢熸椿鐜姹℃煋銆俓n\n鎵撶(銆佸柗婕嗐�佺儰婕嗐�佺儤骞层�佽皟婕嗐�佸柗鏋竻娲楃瓑浜х敓搴熸皵鐨勫伐搴忓湪瀵嗛棴绌洪棿鍐呰繘琛岋紝鏀堕泦浜х敓鐨勫簾姘旓紝骞剁粡娲绘�х偔鍚搁檮绛夋柟寮忓鐞嗗悗锛岄�氳繃鎺掓皵绛掗珮绌烘帓鏀俱�傛帓姘旂瓛楂樺害涓嶄綆浜�15绫筹紝鍏蜂綋楂樺害鎸夌幆澧冨奖鍝嶈瘎浠疯姹傜‘瀹氥�傚惈VOCs鍘熻緟鏉愭枡锛堝娌规紗銆佹秱鏂欙級鍏ㄨ繃绋嬩繚鎸佸瘑闂紝浣跨敤杩囩▼闅忓彇闅忓紑銆俓n\n浜斻�佹秹鍙婂柗娑傜瓑浜х敓搴熸皵鎺掓斁鐨勶紝鑷効瀹夎绗﹀悎銆婁笂娴峰競鍥哄畾姹℃煋婧愰潪鐢茬兎鎬荤儍鍦ㄧ嚎鐩戞祴绯荤粺楠屾敹鍙婅繍琛屾妧鏈姹傦紙璇曡锛夈�嬬殑VOCs鍦ㄧ嚎鐩戞祴瑁呯疆浠ュ強宸ュ喌鐩戞祴妯″潡鍜岃棰戠洃娴嬫ā鍧楋紝骞跺強鏃朵笌鐢熸�佺幆澧冮儴闂ㄧ浉鍏崇洃鎺х郴缁熻仈缃戯紝濮旀墭瑙勮寖鏈嶅姟鍗曚綅瀹氭湡杩愮淮锛屽強鏃惰褰曠浉鍏冲彴璐︼紝纭繚鍏舵甯镐娇鐢紝涓嶈秴鏍囨帓鏀俱�俓n\n鍏�佷笌鍏锋湁銆婂嵄闄╁簾鐗╃粡钀ヨ鍙瘉銆嬭祫璐ㄥ崟浣嶇璁㈠嵄搴熷缃悎鍚岋紝骞剁‘淇濆悎鍚岀殑鏈夋晥鎬с�傛寜鏃剁紪鍒跺嵄闄╁簾鐗╃鐞嗭紙杞Щ锛夎鍒掑苟鍙婃椂鍚戠幆淇濅富绠¢儴闂ㄥ妗堬紝骞朵弗鏍艰惤瀹炲嵄闄╁簾鐗╄浆绉昏仈鍗曞埗搴︺�傚叾浠栦竴鑸浐浣撳簾鐗╂寜鐓ф湰甯傛湁鍏宠瀹氬Ε鍠勫缃�俓n\n搴熺熆鐗╂补銆佸簾娌规紗娓c�佸簾娌规紗妗�/搴熸満娌规《銆佸簾娲绘�х偔銆佸簾鍚搁檮妫夌瓑杩囨护鍚搁檮浠嬭川銆佸簾鍌寲鍓傚拰搴熼搮閰歌搫鐢垫睜绛変富瑕佸嵄搴熷簲绗﹀悎銆婂嵄闄╁簾鐗╄串瀛樻薄鏌撴帶鍒舵爣鍑嗐�嬶紙GB18597-2001锛夌殑鏈夊叧瑕佹眰锛屾敹闆嗐�佽串瀛樸�佽繍杈撱�佸埄鐢ㄣ�佸缃嵄闄╁簾鐗╃殑璁炬柦銆佸満鎵�锛屽繀椤昏缃嵄闄╁簾鐗╄绀烘爣蹇楀拰璇嗗埆鏍囧織锛屾寜鐓у嵄闄╁簾鐗╃壒鎬у垎绫昏繘琛屾敹闆嗐�佽串瀛橈紝涓嶅悓绫诲簾鐗╅棿鏈夋槑鏄剧殑闂撮殧锛岃串瀛樻恫鎬佹垨鍗婃恫鎬佸嵄搴熺殑搴旇缃硠闇叉恫浣撴敹闆嗚缃紝鍗遍櫓搴熺墿涓嶅緱娣峰叆闈炲嵄闄╁簾鐗╀腑璐瓨銆俓n\n涓冦�侀噰鍙栫患鍚堥殧澹般�佸噺闇囨帾鏂斤紝纭繚鍘傜晫鍣0杈惧埌銆婂伐涓氫紒涓氬巶鐣岀幆澧冨櫔澹版帓鏀炬爣鍑嗐�嬶紙GB12348-2008锛夌浉搴斿0鍔熻兘鍖烘帓鏀鹃檺鍊艰姹傦紝纭繚涓嶅櫔澹版壈姘戙�俓n\n鍏�佸悓鎰忔湰鎵胯鍚戠ぞ浼氬叕寮�锛屽苟鑷鎺ュ彈鏀垮簻銆佽涓氱粍缁囥�佷富绠¢儴闂ㄥ鎵樼涓夋柟鐩戠鍗曚綅銆佺ぞ浼氬叕浼椼�佹柊闂昏垎璁虹殑鐩戠潱銆�",
+  '7': "涓鸿返琛岀豢鑹插彂灞曠悊蹇碉紝鍔姏钀ラ�犺瘹瀹炲畧淇$殑绀句細鐜锛岃惤瀹炴苯淇崟浣嶇幆淇濊矗浠伙紝闄嶄綆鍥犵幆澧冪瓑鍥犵礌閫犳垚鐨勬苯淇畨鍏ㄩ殣鎮e拰灞呮皯绾犵悍锛岀‘淇濇苯淇笟鍋ュ悍鏈夊簭鍙戝睍锛屾湰鍗曚綅锛堟垨鏈汉锛夎嚜鎰夸綔鍑哄涓嬫壙璇猴細\n\n涓�銆佷弗鏍奸伒瀹堝浗瀹躲�佸競銆佸尯鏈夊叧鐜淇濇姢娉曞緥銆佹硶瑙勩�佽绔犮�佹爣鍑嗗拰鏀跨瓥瑙勫畾锛屽潥鎸佸畧娉曠敓浜х粡钀ワ紝绉瀬灞ヨ鐜淇濇姢绀句細璐d换銆俓n\n浜屻�佸缓绔嬪仴鍏ㄧ鐞嗗埗搴︼紝鍔犲己鏃ュ父绠$悊锛屽缓绔嬪嵄闄╁簾鐗╁彴璐﹀拰绠$悊璁″垝銆佹薄鏌撻槻娌昏鏂借繍琛岀鐞嗗彴璐︼紝钀藉疄鐜鐩戞祴绛夊悇椤硅姹傦紝钀藉疄鍚勭被鐜椋庨櫓闃茶寖鎺柦銆俓n\n涓夈�佹礂杞﹀簾姘淬�佺淮淇尯鍩熷満鍦板啿娲楀簾姘村叏閮ㄦ敹闆嗭紝缁忎笁绾ф矇鐮傞殧娌规睜澶勭悊鍚庣撼绠℃帓鏀俱�傚簾娌广�佸喎鍐绘恫銆佹鼎婊戞补鍙婇浂閮ㄤ欢鐨勬竻娲楀簾娑层�佹矇娣�娌规偿绛夊崟鐙敹闆嗗洖鏀讹紝绂佹鎺掑叆涓嬫按绯荤粺銆俓n\n鍥涖�佹秹鍙婂柗娑傜瓑浜х敓搴熸皵鎺掓斁鐨勶紝椤诲畨瑁匳OCs澶勭悊璁炬柦锛屾帓鏀剧殑鍚勭被澶ф皵姹℃煋鐗╁簲杈惧埌銆婃苯杞︾淮淇涓氬ぇ姘旀薄鏌撶墿鎺掓斁鏍囧噯銆嬶紙DB31/1288-2021锛夎瀹氱殑鎺掓斁闄愬�艰姹傘�傚簾姘斿噣鍖栬缃畾鏈熺淮鎶わ紝骞跺畾鏈熸洿鎹㈢浉搴旇�楁潗锛堟椿鎬х偔銆佽繃婊ゆ绛夛級锛屽強鏃惰褰曠浉鍏冲彴璐︼紝纭繚鍏舵甯镐娇鐢紝闃叉瀵瑰懆杈瑰眳姘戦�犳垚鐢熸椿鐜姹℃煋銆俓n\n鎵撶(銆佸柗婕嗐�佺儰婕嗐�佺儤骞层�佽皟婕嗐�佸柗鏋竻娲楃瓑浜х敓搴熸皵鐨勫伐搴忓湪瀵嗛棴绌洪棿鍐呰繘琛岋紝鏀堕泦浜х敓鐨勫簾姘旓紝骞剁粡娲绘�х偔鍚搁檮绛夋柟寮忓鐞嗗悗锛岄�氳繃鎺掓皵绛掗珮绌烘帓鏀俱�傛帓姘旂瓛楂樺害涓嶄綆浜�15绫筹紝鍏蜂綋楂樺害鎸夌幆澧冨奖鍝嶈瘎浠疯姹傜‘瀹氥�傚惈VOCs鍘熻緟鏉愭枡锛堝娌规紗銆佹秱鏂欙級鍏ㄨ繃绋嬩繚鎸佸瘑闂紝浣跨敤杩囩▼闅忓彇闅忓紑銆俓n\n浜斻�佹秹鍙婂柗娑傜瓑浜х敓搴熸皵鎺掓斁鐨勶紝鑷効瀹夎绗﹀悎銆婁笂娴峰競鍥哄畾姹℃煋婧愰潪鐢茬兎鎬荤儍鍦ㄧ嚎鐩戞祴绯荤粺楠屾敹鍙婅繍琛屾妧鏈姹傦紙璇曡锛夈�嬫垨鐢熸�佺幆澧冧富绠¢儴闂ㄨ姹傜殑VOCs鍦ㄧ嚎鐩戞祴瑁呯疆浠ュ強宸ュ喌鐩戞帶妯″潡锛屽苟鍙婃椂涓庣敓鎬佺幆澧冮儴闂ㄧ浉鍏崇洃鎺х郴缁熻仈缃戯紝濮旀墭瑙勮寖鏈嶅姟鍗曚綅瀹氭湡杩愮淮锛屽強鏃惰褰曠浉鍏冲彴璐︼紝纭繚鍏舵甯镐娇鐢紝涓嶈秴鏍囨帓鏀俱�俓n\n鍏�佷笌鍏锋湁銆婂嵄闄╁簾鐗╃粡钀ヨ鍙瘉銆嬭祫璐ㄥ崟浣嶇璁㈠嵄搴熷缃悎鍚岋紝骞剁‘淇濆悎鍚岀殑鏈夋晥鎬с�傛寜鏃剁紪鍒跺嵄闄╁簾鐗╃鐞嗭紙杞Щ锛夎鍒掑苟鍙婃椂鍚戠幆淇濅富绠¢儴闂ㄥ妗堬紝骞朵弗鏍艰惤瀹炲嵄闄╁簾鐗╄浆绉昏仈鍗曞埗搴︺�傚叾浠栦竴鑸浐浣撳簾鐗╂寜鐓ф湰甯傛湁鍏宠瀹氬Ε鍠勫缃�俓n\n搴熺熆鐗╂补銆佸簾娌规紗娓c�佸簾娌规紗妗�/搴熸満娌规《銆佸簾娲绘�х偔銆佸簾鍚搁檮妫夌瓑杩囨护鍚搁檮浠嬭川銆佸簾鍌寲鍓傚拰搴熼搮閰歌搫鐢垫睜绛変富瑕佸嵄搴熷簲绗﹀悎銆婂嵄闄╁簾鐗╄串瀛樻薄鏌撴帶鍒舵爣鍑嗐�嬶紙GB18597-2001锛夌殑鏈夊叧瑕佹眰锛屾敹闆嗐�佽串瀛樸�佽繍杈撱�佸埄鐢ㄣ�佸缃嵄闄╁簾鐗╃殑璁炬柦銆佸満鎵�锛屽繀椤昏缃嵄闄╁簾鐗╄绀烘爣蹇楀拰璇嗗埆鏍囧織锛屾寜鐓у嵄闄╁簾鐗╃壒鎬у垎绫昏繘琛屾敹闆嗐�佽串瀛橈紝涓嶅悓绫诲簾鐗╅棿鏈夋槑鏄剧殑闂撮殧锛岃串瀛樻恫鎬佹垨鍗婃恫鎬佸嵄搴熺殑搴旇缃硠闇叉恫浣撴敹闆嗚缃紝鍗遍櫓搴熺墿涓嶅緱娣峰叆闈炲嵄闄╁簾鐗╀腑璐瓨銆俓n\n涓冦�侀噰鍙栫患鍚堥殧澹般�佸噺闇囨帾鏂斤紝纭繚鍘傜晫鍣0杈惧埌銆婂伐涓氫紒涓氬巶鐣岀幆澧冨櫔澹版帓鏀炬爣鍑嗐�嬶紙GB12348-2008锛夌浉搴斿0鍔熻兘鍖烘帓鏀鹃檺鍊艰姹傦紝纭繚涓嶅櫔澹版壈姘戙�俓n\n鍏�佸悓鎰忔湰鎵胯鍚戠ぞ浼氬叕寮�锛屽苟鑷鎺ュ彈鏀垮簻銆佽涓氱粍缁囥�佷富绠¢儴闂ㄥ鎵樼涓夋柟鐩戠鍗曚綅銆佺ぞ浼氬叕浼椼�佹柊闂昏垎璁虹殑鐩戠潱銆�",
 }
 
-export default promise
\ No newline at end of file
+export {promise}
\ No newline at end of file
diff --git a/data/sceneInfo.js b/data/sceneInfo.js
index eaa8633..18361f9 100644
--- a/data/sceneInfo.js
+++ b/data/sceneInfo.js
@@ -45,7 +45,7 @@
       name: "灏遍浣嶆暟",
       id: "rbTotalSeating",
       type: 'radio',
-      value: '',
+      value: '0',
       options: [
         {name: '鏃�', value: '0', checked: true},
         {name: '1~20', value: '20', },
@@ -94,7 +94,7 @@
       name: "鐢ㄦ补绫诲瀷",
       id: "rbCookingOilType",
       type: 'checkbox',
-      value: "",
+      value: '0',
       options: [
         {name: '璞嗘补', value: '0', checked: true},
         {name: '璧烽叆娌�', value: '1', },
@@ -123,7 +123,7 @@
       value: [],
       displayValue: [],
       noValue: false,
-      required: false,
+      required: false
     },
     {
       name: "闆嗕腑鍖�",
@@ -138,7 +138,7 @@
       id: "rbOutfallCount",
       type: 'number',
       input: true,
-      value: '',
+      value: 0,
       noValue: false,
       required: false,
       unit: '涓�'
diff --git a/data/sceneTypes.js b/data/sceneTypes.js
new file mode 100644
index 0000000..2c8c259
--- /dev/null
+++ b/data/sceneTypes.js
@@ -0,0 +1,24 @@
+//灏忕▼搴�
+const sceneTypes1 = [
+  {value: '1', name: '椁愰ギ'},
+  {value: '2', name: '宸ュ湴'},
+  {value: '3', name: '鐮佸ご'},
+  {value: '4', name: '鍫嗗満'},
+  {value: '5', name: '鎼呮媽绔�' },
+  {value: '6', name: '宸ヤ笟浼佷笟' },
+  {value: '7', name: '姹戒慨'},
+]
+
+//椋炵窘鐩戠
+const sceneTypes2 = [
+  {value: '1', name: '宸ュ湴'},
+  {value: '2', name: '鐮佸ご'},
+  {value: '3', name: '鎼呮媽绔�'},
+  {value: '4', name: '宸ヤ笟浼佷笟'},
+  {value: '5', name: '椁愰ギ' },
+  {value: '6', name: '姹戒慨' },
+  {value: '10', name: '閬撹矾'},
+  {value: '14', name: '鍫嗗満'},
+]
+
+module.exports = {sceneTypes1, sceneTypes2}
\ No newline at end of file
diff --git a/data/schedules.js b/data/schedules.js
index c4fa397..307518e 100644
--- a/data/schedules.js
+++ b/data/schedules.js
@@ -11,9 +11,10 @@
     const mon = m > 9 ? m : `0${m}`
     const item = {
       time: moment(`${year}-${mon}-10`),
+      type: 0,
       events: [{
         category: `${year}骞�${m}鏈堢幆淇濆伐浣滄棩绋媊,
-        name: `鏈湀闇�鎻愪氦鐜繚鍙拌处`,
+        name: `鎻愪氦鐜繚鍙拌处`,
         type: 1, //绯荤粺鏃ョ▼
         steps: [{
           index: '01',
@@ -33,9 +34,10 @@
     const mon = m > 9 ? m : `0${m}`
     const item = {
       time: moment(`${year}-${mon}-05`),
+      type: 1,
       events: [{
         category: `${year}骞�${m}鏈堢幆淇濆伐浣滄棩绋媊,
-        name: `鏈湀闇�瑕佸畬鎴愯嚜娴嬫櫤璇刞,
+        name: `瀹屾垚鑷祴鏅鸿瘎`,
         type: 1, //绯荤粺鏃ョ▼
         steps: [{
           index: '01',
@@ -54,8 +56,9 @@
   const item = {
     category: `${year}骞�12鏈堢幆淇濆伐浣滄棩绋媊,
     time: moment(`${year}-12-31`),
+    type: 2,
     events: [{
-      name: `鏈勾搴﹂渶瑕佸畬鎴愬畧娉曟壙璇篳,
+      name: `瀹屾垚瀹堟硶鎵胯`,
       type: 1, //绯荤粺鏃ョ▼
       steps: [{
         index: '01',
diff --git a/pages/home/home.js b/pages/home/home.js
index 42c3a83..652d042 100644
--- a/pages/home/home.js
+++ b/pages/home/home.js
@@ -29,6 +29,7 @@
     userRealName: '',
 
     //鍘嗗彶璇勫垎璇︽儏
+    assessmentCompleted: false,
     historyPoint: {
       time: '娴嬭瘎鍛ㄦ湡----骞�--鏈�',
       score: '--',
@@ -38,7 +39,8 @@
       period: ''
     },
     //鍙拌处瀹屾垚鎯呭喌
-    ledgerInfo: {
+    ledgerCompleted: false,
+    monthInfo: {
       //蹇呭~椤规�绘暟
       totalMust: 0,
       //蹇呭~椤规彁浜ゆ暟
@@ -58,7 +60,7 @@
     //鍒ゆ柇鐢ㄦ埛鏄惁涓洪娆$櫥褰曪紝鍐冲畾鏄惁寮哄埗淇敼榛樿瀵嗙爜
     if (app.globalData.userInfo.remark == null || app.globalData.userInfo.remark == '') {
       wx.navigateTo({
-        url: '/pages/m_user/p_changepw/p_changepw',
+        url: '/pages/mUser/pChangepw/pChangepw',
       })
     }
 
@@ -80,19 +82,20 @@
     this.getLedgerType()
   },
 
-  onShow(){
+  onShow() {
     if (app.globalData.isLogin) {
-      
+
     }
   },
 
-  onPullDownRefresh(){
+  onPullDownRefresh() {
     console.log('onPullDownRefresh');
-    wx.stopPullDownRefresh({
-      success: (res) => {},
-      fail: (res) => {},
-      complete: (res) => {},
-    })
+    this.getNextEvaluationTime()
+    this.getNotice()
+    this.getHistoryPoint()
+    this.getNews()
+    this.getCommitment()
+    this.getLedgerType()
   },
 
   getNextEvaluationTime() {
@@ -137,9 +140,15 @@
         let lastOne = data[0]
         let year = lastOne.updateDate.substring(0, 4)
         let month = lastOne.updateDate.substring(5, 7)
+        const now = moment()
+        if (now.year() == year && now.month() + 1 == month) {
+          that.setData({
+            assessmentCompleted: true
+          })
+        }
         that.setData({
           historyPoint: {
-            time: `娴嬭瘎鍛ㄦ湡${year}骞�${month}鏈坄,
+            time: `鏈�鏂颁竴鏈� ${year}骞�${month}鏈坄,
             score: lastOne.totalPoint,
             rank: lastOne.rank,
             legalIndex: lastOne.level,
@@ -204,6 +213,13 @@
     ledgerservice.getLedgerSummary(app.globalData.accessToken.userId, app.globalData.userInfo.extension2, time, {
       success(res) {
         that.parseLedgerType(res)
+      },
+      complete() {
+        wx.stopPullDownRefresh({
+          success: (res) => {},
+          fail: (res) => {},
+          complete: (res) => {},
+        })
       }
     })
   },
@@ -235,7 +251,11 @@
     monthInfo.percent = monthInfo.totalMust == 0 ? 0 : Math.round(monthInfo.finishedMust / monthInfo.totalMust * 100)
     monthInfo.percent2 = monthInfo.totalSelf == 0 ? 0 : Math.round(monthInfo.finishedSelf / monthInfo.totalSelf * 100)
 
-    this.setData({monthInfo})
+    this.setData({
+      monthInfo,
+      ledgerCompleted: monthInfo.percent >= 100 && monthInfo.percent2 >= 100,
+      // ledgerCompleted: true
+    })
   },
 
   /**
@@ -247,29 +267,33 @@
     switch (index) {
       case "0":
         //娴嬭瘎鍘嗗彶璁板綍
-        url = `/pages/m_assessment/gradereport/gradereport?period=${this.data.historyPoint.period}`
+        if (this.data.historyPoint.period == '') {
+          url = `/pages/mAssessment/grade/grade`
+        } else {
+          url = `/pages/mAssessment/gradereport/gradereport?period=${this.data.historyPoint.period}`
+        }
         break;
       case "5":
         wx.switchTab({
-          url: '/pages/m_ledger/ledgerhome/ledgerhome',
+          url: '/pages/mLedger/ledgerhome/ledgerhome',
         })
         return;
       case "6":
         wx.switchTab({
-          url: '/pages/m_promise/promisehome/promise',
+          url: '/pages/mPromise/promisehome/promise',
         })
-        break;
+        return;
       case "1":
         //宸ヤ綔鎻愰啋
-        url = "/pages/m_notice/notice/notice"
+        url = "/pages/mNotice/notice/notice"
         break;
       case "2":
         //鏅鸿兘鍦ㄧ嚎鍜ㄨ
-        url = "/pages/m_consult/consulthome/consulthome"
+        url = "/pages/mConsult/consulthome/consulthome"
         break;
       case "3":
         //鍦ㄧ嚎瀹堟硶瀛︿範
-        url = `/pages/m_learn/learn/learn`
+        url = `/pages/mLearn/learn/learn`
         break;
       case "4":
         //瀹堟硶鍔ㄦ��
@@ -277,7 +301,7 @@
         let bodyUrl = e.currentTarget.dataset.url
         let fileType = e.currentTarget.dataset.filetype
         wx.showLoading({
-          title: ' 鏂囦欢涓嬭浇涓�',
+          title: ' 鍔犺浇涓�',
           mask: true,
         })
         wx.downloadFile({
@@ -296,18 +320,11 @@
             })
           }
         })
-        break;
+        return;
     }
     if (url != "") {
       wx.navigateTo({
         url: url
-      })
-    } else {
-      wx.showToast({
-        title: '鍔熻兘鏁鏈熷緟',
-        duration: 1000,
-        icon: 'none',
-        mask: true,
       })
     }
   }
diff --git a/pages/home/home.json b/pages/home/home.json
index 2171ed4..7ddecf4 100644
--- a/pages/home/home.json
+++ b/pages/home/home.json
@@ -3,6 +3,6 @@
   "enablePullDownRefresh":true,
   "usingComponents": {
     "cp-notice": "/component/notice/notice",
-    "c-schedule": "../m_service/c_schedule/c_schedule"
+    "c-schedule": "/pages/mService/cSchedule/cSchedule"
   }
 }
\ No newline at end of file
diff --git a/pages/home/home.wxml b/pages/home/home.wxml
index 6d0afc2..0b9e42c 100644
--- a/pages/home/home.wxml
+++ b/pages/home/home.wxml
@@ -26,6 +26,7 @@
       <view class="flex-h_block">
         <view class="top-card" bindtap="goto" data-index="0">
           <view>
+            <view style="font-size: 24rpx;" class="top-card__time">{{historyPoint.time}}</view>
             <view class="top-card__score"><text class="top-card__num">{{historyPoint.score}}</text>鍒�</view>
             <view class="top-card__time">鑷祴鏅鸿瘎寰楀垎 ></view>
           </view>
@@ -73,7 +74,7 @@
     </view>
   </view>
   <view class="page__bd" style="padding-top: 8px;">
-    <c-schedule></c-schedule>
+    <c-schedule ledgerCompleted="{{ledgerCompleted}}" assessmentCompleted="{{assessmentCompleted}}"></c-schedule>
 
     <view class="fyui-panel" bindtap="goto" data-index="1">
       <view class="fyui-cell fyui-cell_select title">
diff --git a/pages/icons/icons.js b/pages/icons/icons.js
index ffe7566..5eb9c54 100644
--- a/pages/icons/icons.js
+++ b/pages/icons/icons.js
@@ -498,6 +498,8 @@
 
         const app = getApp()
         app.watchThemeChange && app.watchThemeChange(this.setIconColor)
+
+        console.log("wtf:::::::::::::::::::::");
     },
     setIconColor(theme) {
         const color = theme === 'dark' ? colorDark : colorLight
diff --git a/pages/mAssessment/assessment/assessment.js b/pages/mAssessment/assessment/assessment.js
new file mode 100644
index 0000000..d8d5982
--- /dev/null
+++ b/pages/mAssessment/assessment/assessment.js
@@ -0,0 +1,320 @@
+// pages/assessment/assessment.js
+const util = require('../../../utils/util')
+const echarts = require("../../../component/ec-canvas/echarts")
+const assessmentService = require("../../../service/assessmentservice")
+const moment = require('../../../utils/moment.min')
+const app = getApp()
+
+function setOption(chart, data) {
+  var option = {
+    // title: {
+    //   text: data.total, //涓绘爣棰樻枃鏈�
+    //   subtext: '娉ㄥ唽浼佷笟', //鍓爣棰樻枃鏈�
+    // },
+    color: ['#8BE7B7'],
+    grid: {
+      containLabel: true
+    },
+    tooltip: {
+      show: true,
+      trigger: 'axis'
+    },
+    xAxis: {
+      name: '鏈堜唤',
+      nameLocation: 'end',
+      type: 'category',
+      boundaryGap: false,
+      data: ['1鏈�', '2鏈�', '3鏈�', '4鏈�', '5鏈�', '6鏈�', '7鏈�', '8鏈�', '9鏈�', '10鏈�', '11鏈�', '12鏈�'],
+      nameTextStyle: {
+        fontSize: 10,
+      },
+      // axisTick: {
+      //   interval = '0'
+      // }
+    },
+    yAxis: {
+      name: '寰楀垎',
+      x: 'center',
+      type: 'value',
+      splitLine: {
+        lineStyle: {
+          type: 'dashed'
+        }
+      }
+      // show: false
+    },
+    grid: {
+      x: 30,
+      y: 30,
+      x2: 37,
+      y2: 60
+    },
+
+    series: [{
+      name: '璇勫垎',
+      type: 'line',
+      smooth: true,
+      areaStyle: {
+        color: {
+          type: 'linear',
+          x: 0.5,
+          y: 0,
+          x2: 0.5,
+          y2: 1,
+          colorStops: [{
+              offset: 0, color: '#28db74' // 0% 澶勭殑棰滆壊
+          }, {
+              offset: 1, color: '#dcfeea79' // 100% 澶勭殑棰滆壊
+          }],
+          opacity: 0.1,
+          global: false // 缂虹渷涓� false
+        }
+      },
+      data: data,
+    }]
+  };
+
+  chart.setOption(option);
+}
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    ec: {
+      lazyLoad: true
+    },
+    //褰撴湀璇勫垎鎯呭喌
+    text1: "娴嬭瘎宸插紑濮�!",
+    text2: "璇峰敖蹇畬鎴愭祴璇�",
+    text3: "鍘绘祴璇�",
+    deadline: "----骞�--鏈�--鏃�",
+    score: undefined,
+    //鎶樼嚎鍥炬椂闂撮�夋嫨
+    planYear: "2000",
+    maxYear: "2000",
+    //褰撳墠鐨勮瘎鍒嗗懆鏈�
+    thisPeriod: '2000/1-1',
+    //璇勪及鍘嗗彶
+    historys: []
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad: function (options) {
+    this.setData({
+      navContentHeight: util.navContentHeight(),
+      statusBarHeight: wx.getSystemInfoSync().statusBarHeight
+    })
+    this._initPlanYear()
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady: function () {
+    // setTimeout(() => {
+    // 鑾峰彇鎶樼嚎鍥剧粍浠�
+    this.ecComponent = this.selectComponent('#mychart-dom-line');
+    this.initChart()
+    // }, 1000);
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow: function () {
+    var that = this
+    wx.startPullDownRefresh({
+      success: (res) => {},
+      fail: (res) => {},
+      complete: (res) => {},
+    })
+  },
+
+  onPullDownRefresh(){
+    this.getHistoryPoint()
+
+  },
+
+  initChart: function () {
+    var data = {
+   
+    }
+    this.ecComponent.init((canvas, width, height, dpr) => {
+      // 鑾峰彇缁勪欢鐨� canvas銆亀idth銆乭eight 鍚庣殑鍥炶皟鍑芥暟
+      // 鍦ㄨ繖閲屽垵濮嬪寲鍥捐〃
+      const chart = echarts.init(canvas, null, {
+        width: width,
+        height: height,
+        devicePixelRatio: dpr // new
+      });
+      canvas.setChart(chart);
+      setOption(chart, data);
+
+      // 灏嗗浘琛ㄥ疄渚嬬粦瀹氬埌 this 涓婏紝鍙互鍦ㄥ叾浠栨垚鍛樺嚱鏁帮紙濡� dispose锛変腑璁块棶
+      this.chart = chart;
+
+      // 娉ㄦ剰杩欓噷涓�瀹氳杩斿洖 chart 瀹炰緥锛屽惁鍒欎細褰卞搷浜嬩欢澶勭悊绛�
+      return chart;
+    });
+  },
+
+  /**
+   * 鍒濆鍖栧勾浠�
+   */
+  _initPlanYear() {
+    var now = moment()
+    var year = now.year()
+    var period = `${now.year()}/${now.month()+1}-${now.month()+1}`
+    var deadline = now.endOf('month').format("YYYY骞碝M鏈圖D鏃�")
+    this.setData({
+      planYear: `${year}骞碻,
+      maxYear: year,
+      thisPeriod: period,
+      deadline: deadline
+    })
+  },
+
+  /**
+   * 鑾峰彇璇勪及鍘嗗彶璁板綍
+   */
+  getHistoryPoint() {
+    var that = this
+    assessmentService.getHistoryPoint(app.globalData.accessToken.userId, 1, {
+      success(data) {
+        //褰撴湀璇勫垎鎯呭喌
+        let lastOne = data[0]
+        let date = moment(lastOne.updateDate)
+        let period = `${date.year()}/${date.month()+1}-${date.month()+1}`
+        if (period == that.data.thisPeriod) {
+          that.setData({
+            score: lastOne.totalPoint,
+            text1: "",
+            text2: "鏈娴嬭瘎宸插畬鎴�",
+            text3: "鏌ョ湅璇︽儏",
+            hasScore: true
+          })
+        } else {
+          that.setData({
+            text1: "娴嬭瘎宸插紑濮�!",
+            text2: "璇峰敖蹇畬鎴愭祴璇�",
+            text3: "鍘绘祴璇�",
+            score: undefined,
+            hasScore: false
+          })
+        }
+
+        //鍘嗗彶璇勫垎鎯呭喌涓庢姌绾垮浘
+        let historyList = []
+        that.chartData = {}
+        data.forEach(d => {
+          //鍘嗗彶璁板綍
+          historyList.push({
+            score: d.totalPoint,
+            color: d.color,
+            rank: d.rank,
+            level: d.level,
+            period: d.period,
+            time: d.period.replace('/', '骞�').replace(/\-[0-9]+/, '鏈�'),
+            scoreId: d.tPGuid,
+            updateTime: moment(d.updateDate).format('YYYY-MM-DD hh:mm')
+          })
+
+          //鎶樼嚎鍥炬暟鎹�
+          let y = d.period.split('/')[0]
+          let key =  y + '骞�'
+          if (!that.chartData.hasOwnProperty(key)) {
+            that.chartData[key] = ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
+            if (y == date.year() + '') {
+              let m = date.month()
+              for (let i = m; i <= 11; i++) {
+                that.chartData[key][i] = '-'
+              }
+            }
+          }
+          let monthGap = d.period.split('/')[1]
+          let startMonth = parseInt(monthGap.split('-')[0])
+          let endMonth = parseInt(monthGap.split('-')[1])
+          for (let i = startMonth; i <= endMonth; i++) {
+            that.chartData[key][i-1] = d.totalPoint
+          }
+        });
+        that.setData({
+          historys: historyList
+        })
+        setTimeout(() => {
+          setOption(that.chart, that.chartData[that.data.planYear]);
+        }, 500);
+      },
+      complete(res) {
+        wx.stopPullDownRefresh({
+          success: (res) => {},
+          fail: (res) => {},
+          complete: (res) => {},
+        })
+      }
+    })
+  },
+
+  /**
+   * 閫夋嫨璁″垝骞翠唤
+   */
+  bindYearChange(e) {
+    let y = e.detail.value
+    this.setData({
+      planYear: `${y}骞碻,
+    })
+    setOption(this.chart, this.chartData[this.data.planYear])
+  },
+
+  /**
+   * 椤甸潰璺宠浆
+   */
+  goto: function (e) {
+    var url = ""
+    var index = e.currentTarget.dataset.index
+    switch (index) {
+      case "0":
+        //鍘绘祴璇勬垨鑰呮煡鐪嬭鎯�
+        if (this.data.score) {
+          url = `/pages/mAssessment/gradereport/gradereport?period=${this.data.thisPeriod}`
+        } else {
+          url = `/pages/mAssessment/grade/grade?record=false`
+        }
+        break;
+      case "1":
+        //鍘嗗彶璇勪及璁板綍璇︽儏
+        var period = e.currentTarget.dataset.period
+        url = `/pages/mAssessment/gradereport/gradereport?period=${period}`
+        break;
+      case "2":
+        //纰虫帓鏀炬櫤鑳戒及绠�
+        url = ""
+        break;
+      case "3":
+        //鍏朵粬涓撻」鑷祴
+        url = ""
+        break;
+      case "4":
+        break;
+      case "5":
+        break;
+    }
+    if (url != "") {
+      wx.navigateTo({
+        url: url
+      })
+    } else {
+      wx.showToast({
+        title: '鍔熻兘鏁鏈熷緟',
+        duration: 1000,
+        icon: 'none',
+        mask: true,
+      })
+    }
+  }
+})
\ No newline at end of file
diff --git a/pages/mAssessment/assessment/assessment.json b/pages/mAssessment/assessment/assessment.json
new file mode 100644
index 0000000..2419e5a
--- /dev/null
+++ b/pages/mAssessment/assessment/assessment.json
@@ -0,0 +1,10 @@
+{
+  "navigationBarTitleText": "鑷祴鏅鸿瘎",
+  "enablePullDownRefresh":true,
+  "usingComponents": {
+    "cp-progress": "/component/progress/progress",
+    "ec-canvas": "/component/ec-canvas/ec-canvas",
+    "mp-icon": "/component/icon/icon"
+  },
+  "navigationBarBackgroundColor": "#57E4CB"
+}
\ No newline at end of file
diff --git a/pages/mAssessment/assessment/assessment.wxml b/pages/mAssessment/assessment/assessment.wxml
new file mode 100644
index 0000000..ff8b50e
--- /dev/null
+++ b/pages/mAssessment/assessment/assessment.wxml
@@ -0,0 +1,111 @@
+<!--pages/assessment/assessment.wxml-->
+<import src="/template/nodata.wxml"></import>
+
+<view class="page">
+  <!-- <view class="banner-bg"></view> -->
+
+  <!-- <view style="padding-top: {{statusBarHeight}}px;" class="statusbar-title">
+    <view style="line-height: {{navContentHeight - statusBarHeight}}px;">
+      <text>淇$敤鏅鸿瘎</text>
+    </view>
+  </view> -->
+
+  <view class="page__hd flex-h">
+    <view class="flex-v">
+      <view>
+        <view class="title">{{text1}}</view>
+        <view class="title">{{text2}}</view>
+        <view class="tag">娴嬭瘎鎴鏃堕棿锛歿{deadline}}</view>
+        <image wx:if="{{hasScore}}" src="/res/icons/complete.png" class="t-image" mode="aspectFit"></image>
+      </view>
+      <view class="btn" bindtap="goto" data-index="0">{{text3}}</view>
+    </view>
+    <view class="progress" style="margin-right: 0px;">
+      <cp-progress progress="{{score}}" />
+    </view>
+  </view>
+
+  <view class="page__bd">
+    <view style="margin-left: 10px;">鍒嗙被娴嬭瘎</view>
+    <view class="top-card top-card_main" bindtap="goto" data-index="0">
+      <image src="/res/icons/ass_3.png" mode="aspectFit"></image>
+      <view>
+        <view class="top-card__name">瀹堟硶鑷祴鏅鸿瘎</view>
+        <view class="top-card__tag">鐐瑰嚮杩涜娴嬭瘎 ></view>
+      </view>
+      <!-- <mp-icon icon="arrow" class="" size="15" color="white"></mp-icon> -->
+    </view>
+    <view class="flex-h">
+      <view class="flex-h_block" bindtap="goto" data-index="2">
+        <view class="top-card">
+          <image src="/res/icons/ass_2.png" mode="aspectFit"></image>
+          <view>
+            <view class="top-card__name">纰虫帓鏀炬櫤鑳戒及绠�</view>
+            <view class="top-card__tag">鐐瑰嚮杩涜娴嬭瘎 ></view>
+          </view>
+        </view>
+      </view>
+      <view class="flex-h_block" bindtap="goto" data-index="3">
+        <view class="top-card top-card_2">
+          <image src="/res/icons/ass_1.png" mode="aspectFit"></image>
+          <view>
+            <view class="top-card__name">鍏朵粬涓撻」鑷祴</view>
+            <view class="top-card__tag">鐐瑰嚮杩涜娴嬭瘎 ></view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <view style="margin-left: 10px;margin-top: 8px;">娴嬭瘎瓒嬪娍</view>
+    <view class="fyui-panel line-chart-card">
+      <view class="flex-h" style="padding: 4px;">
+        <view></view>
+        <picker bindchange="bindYearChange" data-type="planYear" value="{{planYear}}" mode="date" fields="year" end="{{maxYear}}">
+          <view class="fyui-selector">
+            {{planYear}}
+            <mp-icon icon="arrow" class="icon-down" size="10" color="black"></mp-icon>
+          </view>
+        </picker>
+      </view>
+      <ec-canvas id="mychart-dom-line" canvas-id="mychart-line" ec="{{ ec }}"></ec-canvas>
+      <!-- <template wx:else is="nodataPage"></template> -->
+    </view>
+
+    <view class="fyui-cell fyui-cell_select title">
+      <view class="fyui-cell__bd">鍘嗗彶娴嬭瘎</view>
+      <view class="fyui-cell__ft">鏌ョ湅鏇村</view>
+    </view>
+
+    <block wx:if="{{historys.length > 0}}">
+      <view wx:for="{{historys}}" wx:key="index" data-index="index" class="flex-h" style="align-items: flex-start;">
+        <view class="history_icon">
+          <view class="history_icon_1">
+            <view></view>
+          </view>
+          <view class="history_icon_2"></view>
+        </view>
+        <view style="flex: 1;">
+          <view class="history_time">{{item.time}}</view>
+          <view class="h-cell fyui-panel">
+            <view class="h-tag">{{item.updateTime}}</view>
+            <view class="h-line_1">
+              <view class="flex-h">
+                <view class="h-score" style="background-color: {{item.color}};">
+                  {{item.score}}
+                </view>
+                <view class="h-rank">
+                  <view>椋庨櫓鎺掑悕锛歿{item.rank}}</view>
+                  <view>椋庨櫓绛夌骇锛歿{item.level}}</view>
+                </view>
+              </view>
+              <view data-id="{{item.scoreId}}" class="h-btn" bindtap="goto" data-index="1" data-period="{{item.period}}">鍘荤湅鐪�</view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </block>
+
+    <template wx:else is="nodataPage"></template>
+  </view>
+  <view class="page__ft">
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mAssessment/assessment/assessment.wxss b/pages/mAssessment/assessment/assessment.wxss
new file mode 100644
index 0000000..1c152f1
--- /dev/null
+++ b/pages/mAssessment/assessment/assessment.wxss
@@ -0,0 +1,192 @@
+/* pages/assessment/assessment.wxss */
+.banner-bg {
+  position: fixed;
+  width: 100%;
+  height: 50vh;
+  background: linear-gradient(to bottom, #57E4CB, #bbf3eb);
+  /* color: #dcfeea79; */
+}
+
+.page__hd {
+  background: linear-gradient(to bottom, #57E4CB, #bbf3eb);
+  padding-bottom: 4px;
+}
+
+.page__hd .title {
+  font-size: 16px;
+  font-weight: 600;
+  margin-top: 8px;
+}
+
+.page__hd .tag {
+  font-size: 10px;
+  color: #55A37D;
+  margin-top: 8px;
+}
+
+.page__hd .t-image {
+  width: 100px;
+  height: 100px;
+}
+
+.page__hd .btn {
+  border-radius: 20px;
+  line-height: 20px;
+  background-color: #52be85;
+  padding: 8px 4px;
+  text-align: center;
+  color: white;
+}
+
+.line-chart-card {
+  position: relative;
+  height: 30vh;
+  padding: 0 0 8px 0;
+}
+
+.h-cell {
+  padding: 16px 10px;
+}
+
+.h-score {
+  background-color: #F0AE4E;
+  border-radius: 50%;
+  padding: 8px;
+  width: 20px;
+  height: 20px;
+  color: white;
+  font-size: 12px;
+  text-align: center;
+}
+
+.h-line_1 {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.h-rank {
+  font-size: 14px;
+  margin-left: 4px;
+}
+
+.h-line_2 {
+  display: flex;
+  justify-content: space-between;
+  font-size: 10px;
+  color: var(--fyui-text-color_3);
+  padding-left: 40px;
+  padding-top: 4px;
+  margin-top: 4px;
+  border-top: 1px rgba(202, 202, 202, 0.295) solid;
+  align-items: center;
+}
+
+.h-btn {
+  border-radius: 4px;
+  background: linear-gradient(to right, #6DF1A9, #62EBCF);
+  padding: 4px 16px;
+  color: white;
+  font-size: 14px;
+}
+
+.h-tag{
+  position: absolute;
+  color: var(--fyui-text-color_3);
+  font-size: 12px;
+  text-align: end;
+  bottom: 0;
+  right: 8px;
+}
+
+.flex-h_block {
+  flex: 1;
+}
+
+.top-card {
+  position: relative;
+  border-radius: 4px;
+  /* background: linear-gradient(90deg, #A3D9F5, #88E1EC); */
+  background-color: rgb(199, 199, 199);
+  color: white;
+  padding: 8px;
+  margin-left: 10px;
+  margin-right: 2px;
+  display: flex;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+
+.top-card_2 {
+  /* background: linear-gradient(90deg, #87CEB2, #6CD398); */
+  background-color: rgb(199, 199, 199);
+  margin-left: 2px;
+  margin-right: 10px;
+}
+
+.top-card_main {
+  background: linear-gradient(90deg, #55E2C9, #b6e9dc);
+  margin-left: 10px;
+  margin-right: 10px;
+  margin-bottom: 4px;
+}
+
+.top-card>image {
+  width: 40px;
+  height: 40px;
+  margin-right: 10px;
+}
+
+.top-card .top-card__tag {
+  /* text-align: end; */
+  font-size: 12px;
+}
+
+.top-card .top-card__name {
+  font-size: 14px;
+  /* width: 100%; */
+  /* font-weight: 600; */
+  /* text-align: center; */
+  /* margin: 16px; */
+}
+
+.history_time{
+  /* background-color: red; */
+  margin-left: 10px;
+  font-size: 14px;
+  font-weight: 550;
+}
+
+.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: #8DF1E0;
+  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: 100px;
+  border: 1px dashed #80EFDC;
+}
\ No newline at end of file
diff --git a/pages/mAssessment/grade/grade.js b/pages/mAssessment/grade/grade.js
new file mode 100644
index 0000000..21ffc81
--- /dev/null
+++ b/pages/mAssessment/grade/grade.js
@@ -0,0 +1,252 @@
+// pages/grade/grade.js
+const assessmentService = require("../../../service/assessmentservice")
+const moment = require('../../../utils/moment.min')
+const app = getApp()
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    // {
+    //   title1: '鍦ㄧ嚎鐩戞祴璁惧',
+    //   sub1: [{
+    //     title2: '璁惧',
+    //     group: 0,
+    //     sub2: [{
+    //         content: '璁惧鏈畨瑁�',
+    //         score: '-10',
+    //         select: false
+    //       },
+    //       {
+    //         content: '璁惧绉佽嚜鎷嗛櫎',
+    //         score: '-10',
+    //         select: false
+    //       },
+    //       {
+    //         content: '璁惧鏈繍琛�',
+    //         score: '-10',
+    //         select: false
+    //       }, {
+    //         content: '璁惧鏈繍缁�',
+    //         score: '-10',
+    //         select: false
+    //       }
+    //     ]
+    //   }, {
+    //     title2: '鏁版嵁',
+    //     group: 1,
+    //     sub2: [{
+    //         content: '鏁版嵁鏈秴鏍�',
+    //         score: '-10',
+    //         select: false
+    //       },
+    //       {
+    //         content: '鏁版嵁閮ㄥ垎瓒呮爣',
+    //         score: '-10',
+    //         select: false
+    //       },
+    //       {
+    //         content: '鏁版嵁澶ч噺瓒呮爣',
+    //         score: '-10',
+    //         select: false
+    //       }, {
+    //         content: '鏁版嵁涓ラ噸瓒呮爣',
+    //         score: '-10',
+    //         select: false
+    //       }
+    //     ]
+    //   }],
+    // }
+    evaluations: []
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad: function (options) {
+    this.getScoreHistory()
+  },
+
+  /**
+   * 鑾峰彇鏈湡鐨勮瘎浼拌鍒欏強璁板綍
+   */
+  getScoreHistory() {
+    var that = this
+    let now = moment()
+    //鏍规嵁褰撳墠鏃堕棿鑾峰彇璇勪及鍛ㄦ湡YYYY/M-M
+    this.period = `${now.year()}/${now.month()+1}-${now.month()+1}`
+    assessmentService.getScore(app.globalData.accessToken.userId, this.period, {
+      success(data) {
+        that.setData({
+          evaluations: data
+        })
+      }
+    })
+  },
+
+  choose: function (e) {
+    var index = e.currentTarget.dataset.index
+    var group = e.currentTarget.dataset.group
+    var evaluations = this.data.evaluations
+    for (let i = 0; i < evaluations.length; i++) {
+      const e1 = evaluations[i];
+      var found = false
+      for (let y = 0; y < e1.sub1.length; y++) {
+        const e2 = e1.sub1[y];
+        if (e2.group == group) {
+          //澶氶�夎鍒�
+          if (e2.selectMode == 'multi_mode') {
+            e2.sub2[index].select = !e2.sub2[index].select
+          } 
+          //榛樿涓哄崟閫夎鍒�
+          else  {
+            for (let i = 0; i < e2.sub2.length; i++) {
+              const s2 = e2.sub2[i];
+              if (i == index) {
+                s2.select = !s2.select
+              } else {
+                s2.select = false
+              }
+            }
+          }
+          found = true
+          break
+        }
+      }
+      if (found) {
+        break
+      }
+    }
+
+    this.setData({
+      evaluations: evaluations
+    })
+  },
+
+  onSubmit: function () {
+    var itemList = []
+    var totalcount = 0
+    var selectcount = 0
+    var evaluations = this.data.evaluations
+    for (let i = 0; i < evaluations.length; i++) {
+      const e1 = evaluations[i];
+      for (let y = 0; y < e1.sub1.length; y++) {
+        const e2 = e1.sub1[y];
+        //褰撻�夐」涓嶆槸闄勫姞鍒嗭紝鏄熀纭�鍒嗘椂锛屾墠浼氳绠椾负蹇呴�夐」
+        if (e1.scoreMode != 'addition_score') totalcount++
+        let counted = false//璁板綍褰撳墠璇勪及椤规槸鍚﹀凡缁忚鏁拌繃
+        for (let t = 0; t < e2.sub2.length; t++) {
+          const s2 = e2.sub2[t];
+          if (s2.select) {
+            //灏嗘墍閫夌殑鏉$洰璁板綍
+            itemList.push({
+              first: s2.id,
+              second: s2.score + ''
+            })
+            //璁板綍褰撳墠璇勪及椤规槸鍚﹀凡琚�夋嫨锛岃鏁版渶澶氱疮鍔犱竴娆�
+            if (!counted && e1.scoreMode != 'addition_score') {
+              selectcount++
+              counted = true 
+            }
+          }
+        }
+        
+      }
+    }
+
+    if (selectcount < totalcount) {
+      wx.showToast({
+        title: '璇峰畬鎴愭墍鏈夊熀纭�璇勪及椤�',
+        icon: 'none',
+      })
+    } else {
+      this.setData({
+        itemList: itemList,
+        showDialog: true,
+        startCalculate: false
+      })
+    }
+  },
+
+  upload: function () {
+    var that = this
+    this.setData({
+      showDialog: false,
+      showDialog2: true,
+      startCalculate: true,
+      loadingOverText: ''
+    })
+
+    this.loadingText("璁$畻鎬诲垎涓�", function () {
+      that.setData({
+        loadingOverText: ['璁$畻鎬诲垎瀹屾垚']
+      })
+      that.loadingText('绛夌骇璇勪及涓�', function () {
+        that.setData({
+          loadingOverText: ['璁$畻鎬诲垎瀹屾垚', '绛夌骇璇勪及瀹屾垚']
+        })
+        var h = that.loadingText('鐢熸垚缁煎悎娴嬭瘎鎶ュ憡', function () {
+          that.setData({
+            loadingText: '',
+            loadingOverText: ['璁$畻鎬诲垎瀹屾垚', '绛夌骇璇勪及瀹屾垚', '缁煎悎娴嬭瘎鎶ュ憡鐢熸垚澶辫触']
+          })
+        }, 25)
+        assessmentService.uploadScore(app.globalData.accessToken.userId, that.period, that.data.itemList, {
+          success(data) {
+            clearInterval(h)
+            that.setData({
+              startCalculate: false,
+              loadingText: '',
+              loadingOverText: ['璁$畻鎬诲垎瀹屾垚', '绛夌骇璇勪及瀹屾垚', '缁煎悎娴嬭瘎鎶ュ憡鐢熸垚']
+            })
+          }
+        })
+      })
+    })
+  },
+
+  gotoReport() {
+    this.setData({
+      showDialog2: false,
+    })
+    wx.redirectTo({
+      url: '/pages/mAssessment/gradereport/gradereport'
+    })
+  },
+
+  goBack() {
+    this.setData({
+      showDialog2: false,
+    })
+    wx.navigateBack({
+      delta: 1,
+    })
+  },
+
+  loadingText(text, onDone, max) {
+    var i = 0
+    if (max == undefined) {
+      max = 5
+    }
+    var h = setInterval(() => {
+      if (i > max) {
+        clearInterval(h)
+        onDone()
+      } else {
+        var points = ''
+        var n = i % 3
+        for (let t = 0; t < n + 1; t++) {
+          points += '.'
+        }
+        this.setData({
+          loadingText: text + points
+        })
+        i++
+      }
+    }, 200);
+
+    return h
+  },
+})
\ No newline at end of file
diff --git a/pages/mAssessment/grade/grade.json b/pages/mAssessment/grade/grade.json
new file mode 100644
index 0000000..416607c
--- /dev/null
+++ b/pages/mAssessment/grade/grade.json
@@ -0,0 +1,9 @@
+{
+  "navigationBarTitleText": "鑷祴鏅鸿瘎",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "c-dialog": "/component/commondialog/commondialog",
+    "mp-icon": "/component/icon/icon"
+  }
+}
\ No newline at end of file
diff --git a/pages/mAssessment/grade/grade.wxml b/pages/mAssessment/grade/grade.wxml
new file mode 100644
index 0000000..32c2388
--- /dev/null
+++ b/pages/mAssessment/grade/grade.wxml
@@ -0,0 +1,37 @@
+<!--pages/grade/grade.wxml-->
+<view class="page">
+  <view class="banner-bg"></view>
+  <view class="page__bd fyui-panel">
+    <view wx:for="{{evaluations}}" wx:key="index" data-index="index">
+      <view class="e-title__1">{{item.title1}}{{item.scoreMode == 'addition_score' ? '锛堥檮鍔犲垎锛�' : ''}}</view>
+      <block wx:for="{{item.sub1}}" wx:key="i" data-index="i" wx:for-item="sub1">
+        <view class="e-title__2">{{sub1.title2}}{{sub1.selectMode == 'multi_mode' ? '锛堝閫夛級' : ''}}</view>
+        <view class="e-content {{sub.select ? 'select' : ''}}" wx:for="{{sub1.sub2}}" wx:key="index"
+          data-index="{{index}}" wx:for-item="sub" data-group="{{sub1.group}}" bindtap="choose">
+          <mp-icon icon="done" color="#effcf2" size="16"></mp-icon>
+          <view>{{sub.content}}</view>
+          <!-- <view>{{sub.score}}</view> -->
+        </view>
+      </block>
+    </view>
+  </view>
+  <view class="page__ft">
+    <view class="submit" bindtap="onSubmit">娴嬭瘎</view>
+  </view>
+
+  <c-dialog show="{{showDialog}}" yes="寮�濮�" bindconfirm="upload">
+    <view>璇风‘璁ゅ凡瀹屾垚閫夋嫨锛屽紑濮嬫祴璇勶紵</view>
+  </c-dialog>
+  <c-dialog show="{{showDialog2}}" yes="鏌ョ湅鎶ュ憡" bindconfirm="gotoReport" bindclose="goBack" no="杩斿洖" showBtn="{{!startCalculate}}">
+    <view>
+      <image src="/res/icons/calculaiton.png" alt="" srcset="" class="calculaiton_img" />
+      <view class="loading_over_group">
+        <view wx:for="{{loadingOverText}}" class="loading_over">
+          <image src="/res/icons/check.png"></image>
+          <view class="loading_text">{{item}}</view>
+        </view>
+      </view>
+      <view class="loading_text">{{loadingText}}</view>
+    </view>
+  </c-dialog>
+</view>
\ No newline at end of file
diff --git a/pages/mAssessment/grade/grade.wxss b/pages/mAssessment/grade/grade.wxss
new file mode 100644
index 0000000..ec16402
--- /dev/null
+++ b/pages/mAssessment/grade/grade.wxss
@@ -0,0 +1,71 @@
+/* pages/grade/grade.wxss */
+.banner-bg {
+  position: fixed;
+  width: 100%;
+  height: 5vh;
+  background-color: #57E4CB;
+}
+
+.e-title__1{
+  text-align: center;
+  padding: 16px 16px 4px 16px;
+  font-size: 20px;
+  font-weight: 600;
+}
+
+.e-title__2 {
+  font-size: 16px;
+  padding: 8px;
+}
+
+.e-content {
+  display: flex;
+  justify-content: flex-start;
+  align-items: center;
+  font-size: 14px;
+  color: var(--fyui-text-color_2);
+  background-color: #effcf2;
+  padding: 8px 10px;
+  margin-left: 4px;
+  margin-right: 4px;
+  margin-bottom: 4px;
+}
+
+.select {
+  background-color: #46b194;
+  color: white;
+}
+
+.submit {
+  border-radius: 4px;
+  background: linear-gradient(to right, #6DF1A9, #62EBCF);
+  margin: 8px;
+  color: white;
+  padding: 8px;
+}
+
+.calculaiton_img {
+  width: 80px;
+  height: 80px;
+}
+
+.loading_over_group {
+  display: block;
+  margin: auto;
+  width: 50%;
+}
+
+.loading_over {
+  display: flex;
+  justify-content: flex-start;
+}
+
+.loading_over>image {
+  width: 16px;
+  height: 16px;
+}
+
+.loading_text {
+  font-size: 12px;
+  color: #545555;
+}
\ No newline at end of file
diff --git a/pages/mAssessment/gradedetail/gradedetail.js b/pages/mAssessment/gradedetail/gradedetail.js
new file mode 100644
index 0000000..9498e6e
--- /dev/null
+++ b/pages/mAssessment/gradedetail/gradedetail.js
@@ -0,0 +1,22 @@
+// pages/gradedetail/gradedetail.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    rank: 1,
+    level: '浣�',
+    period: '2022骞�5鏈�',
+    time: '2022骞�5鏈�10鏃�'
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad: function (options) {
+    this.setData({
+      score: options.score
+    })
+  },
+})
\ No newline at end of file
diff --git a/pages/mAssessment/gradedetail/gradedetail.json b/pages/mAssessment/gradedetail/gradedetail.json
new file mode 100644
index 0000000..3b7081b
--- /dev/null
+++ b/pages/mAssessment/gradedetail/gradedetail.json
@@ -0,0 +1,6 @@
+{
+  "navigationBarTitleText": "璇︽儏",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mAssessment/gradedetail/gradedetail.wxml b/pages/mAssessment/gradedetail/gradedetail.wxml
new file mode 100644
index 0000000..8ed18b1
--- /dev/null
+++ b/pages/mAssessment/gradedetail/gradedetail.wxml
@@ -0,0 +1,67 @@
+<!--pages/gradedetail/gradedetail.wxml-->
+<view class="page">
+  <view class="banner-bg"></view>
+  <view class="page__bd">
+    <view class="fyui-panel">
+      <view class="flex-h">
+        <view>鑰冩牳寰楀垎</view>
+        <view>{{score}}</view>
+      </view>
+      <view class="flex-h">
+        <view>椋庨櫓鎺掑悕</view>
+        <view>{{rank}}</view>
+      </view>
+      <view class="flex-h">
+        <view>椋庨櫓绛夌骇</view>
+        <view>{{level}}</view>
+      </view>
+      <view class="flex-h">
+        <view>鑰冩牳鍛ㄦ湡</view>
+        <view>{{period}}</view>
+      </view>
+      <view class="flex-h last">
+        <view>鑷瘎鏃堕棿</view>
+        <view>{{time}}</view>
+      </view>
+    </view>
+    <view style="margin-left: 12px; font-weight: 600; font-size: 14px;margin-top: 8px;">鎵e垎缁嗗垯</view>
+    <view class="fyui-panel">
+      <view class="flex-h">
+        <view>鎵e垎绫诲瀷</view>
+        <view>璁惧</view>
+      </view>
+      <view class="flex-h">
+        <view>鎵e垎鍒嗗��</view>
+        <view>-10</view>
+      </view>
+      <view class="flex-h">
+        <view>鎵e垎鎻忚堪</view>
+        <view>璁惧绉佽嚜鎷嗛櫎锛屾湭瑙勮寖瀹夎璁惧</view>
+      </view>
+      <view class="flex-h" style="margin-bottom: 16px;">
+        <view>鐩稿叧寤鸿</view>
+        <view>寤鸿鍙婃椂瑙勮寖瀹夎璁惧</view>
+      </view>
+
+      <view class="flex-h first" style="padding-top: 16px;">
+        <view>鎵e垎绫诲瀷</view>
+        <view>鏁版嵁</view>
+      </view>
+      <view class="flex-h">
+        <view>鎵e垎鍒嗗��</view>
+        <view>-10</view>
+      </view>
+      <view class="flex-h">
+        <view>鎵e垎鎻忚堪</view>
+        <view>鏁版嵁閮ㄥ垎瓒呮爣</view>
+      </view>
+      <view class="flex-h">
+        <view>鐩稿叧寤鸿</view>
+        <view>寤鸿瑙勮寖鐢熶骇锛屽姞寮虹幆淇濋槻鎶�</view>
+      </view>
+    </view>
+  </view>
+  <view class="page__ft">
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mAssessment/gradedetail/gradedetail.wxss b/pages/mAssessment/gradedetail/gradedetail.wxss
new file mode 100644
index 0000000..3937423
--- /dev/null
+++ b/pages/mAssessment/gradedetail/gradedetail.wxss
@@ -0,0 +1,29 @@
+/* pages/gradedetail/gradedetail.wxss */
+.page__bd {
+  font-size: 14px;
+}
+.banner-bg {
+  position: fixed;
+  width: 100%;
+  height: 5vh;
+  background-color: #57E4CB;
+}
+
+.fyui-panel {
+  padding: 8px;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+}
+
+.fyui-panel .flex-h {
+  margin-top: 6px;
+}
+
+.fyui-panel .first {
+  border-top: 1px rgba(214, 214, 214, 0.308) solid;
+}
+
+.fyui-panel .last {
+  border-bottom: 0px rgba(214, 214, 214, 0.308) solid;
+}
\ No newline at end of file
diff --git a/pages/mAssessment/gradereport/gradereport.js b/pages/mAssessment/gradereport/gradereport.js
new file mode 100644
index 0000000..b076adb
--- /dev/null
+++ b/pages/mAssessment/gradereport/gradereport.js
@@ -0,0 +1,294 @@
+// pages/gradereport/gradereport.js
+import bLoadingStatus from '../../../base/behaviors/bLoadingStatus'
+import bLoadingToast from '../../../base/behaviors/bLoadingToast'
+
+const echarts = require("../../../component/ec-canvas/echarts")
+const assessmentService = require("../../../service/assessmentservice")
+const moment = require('../../../utils/moment.min')
+const app = getApp()
+
+function setOption(chart, data) {
+  var option = {
+    title: {
+      text: data.score, //涓绘爣棰樻枃鏈�
+      subtext: `娴嬭瘎${data.level}`, //鍓爣棰樻枃鏈�
+      left: 'center',
+      top: '40%',
+      textStyle: {
+        fontSize: 20,
+        fontWeight: 'bold',
+        color: 'black',
+        align: 'center',
+        textBorderColor: 'black',
+        // textBorderWidth: 1
+      },
+      subtextStyle: {
+        fontFamily: "寰蒋闆呴粦",
+        fontSize: 10,
+        color: 'black',
+        textBorderColor: 'black',
+        // textBorderWidth: 1
+      },
+      // backgroundColor: 'black'
+    },
+    color: ['white'],
+    tooltip: {},
+    legend: {
+      show: false
+    },
+    radar: {
+      radius: '60%',
+      axisName: {
+        color: 'white'
+      },
+      shape: 'polygon',
+      axisLine: {
+        show: true,
+        lineStyle: {
+          color: 'white',
+          type: 'dashed',
+          join: 'round'
+        }
+      },
+      axisLabel: {
+        show: false
+      },
+      splitLine: {
+        show: true,
+        color: 'white'
+      },
+      splitArea: {
+        show: true,
+        areaStyle: {
+          color: ['#4ca796', '#63c5b3', '#74DFCB', '#76E6D2', '#75ECD7'],
+        }
+      },
+      indicator: data.indicator
+    },
+    series: [{
+      name: "寰楀垎",
+      type: "radar",
+      areaStyle: {
+        color: 'white',
+        opacity: 0.9
+      },
+      label: {
+        show: false,
+        position: 'inside'
+      },
+      data: [{
+        value: data.value,
+        name: "寰楀垎"
+      }]
+    }],
+    // grid: {
+    //   x: 30,
+    //   y: 30,
+    //   x2: 35,
+    //   y2: 53
+    // },
+  };
+
+  chart.setOption(option);
+}
+Page({
+  behaviors: [bLoadingStatus, bLoadingToast],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    ec: {
+      lazyLoad: true
+    },
+    creditText: '----------------------',
+    gradeDetails: [{
+      name: '鑷瘎寰楀垎',
+      detail: '--'
+    }, {
+      name: '椋庨櫓鎺掑悕',
+      detail: '--'
+    }, {
+      name: '椋庨櫓绛夌骇',
+      detail: '--'
+    }, {
+      name: '鑷瘎鍛ㄦ湡',
+      detail: '--'
+    }, {
+      name: '鑷瘎鏃堕棿',
+      detail: '--'
+    }],
+
+    //澶卞垎鐨勭被鍨�
+    losePointsItem: [],
+    losePoints: [{
+      baseRule: '',
+      name: '',
+      itemlist: [{
+        ruleName: '----',
+        score: '--',
+        remark: '------------'
+      },{
+        ruleName: '----',
+        score: '--',
+        remark: '------------'
+      }]
+    }]
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad: function (options) {
+    if (options.period) {
+      this.setData({
+        period: options.period
+      })
+    } else {
+      let now = moment()
+      //鏍规嵁褰撳墠鏃堕棿鑾峰彇璇勪及鍛ㄦ湡YYYY/M-M
+      let period = `${now.year()}/${now.month()+1}-${now.month()+1}`
+      this.setData({
+        period: period
+      })
+    }
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady: function () {
+    this.ecComponent = this.selectComponent('#mychart-dom-radar');
+    this.initChart()
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow: function () {
+
+  },
+
+  initChart: function () {
+    var data = {
+      score: '--',
+      level: '涓�鑸�',
+      indicator: [{
+        name: "娉曡",
+        max: 100
+      }, {
+        name: "绠$悊",
+        max: 100
+      }, {
+        name: "鎵胯",
+        max: 100
+      }, {
+        name: "瀹堟硶",
+        max: 100
+      }, {
+        name: "璁惧",
+        max: 100
+      }],
+      value: [100, 100, 80, 5, 67, 82]
+    }
+      this.ecComponent.init((canvas, width, height, dpr) => {
+        // 鑾峰彇缁勪欢鐨� canvas銆亀idth銆乭eight 鍚庣殑鍥炶皟鍑芥暟
+        // 鍦ㄨ繖閲屽垵濮嬪寲鍥捐〃
+        const chart = echarts.init(canvas, null, {
+          width: width,
+          height: height,
+          devicePixelRatio: dpr // new
+        });
+        // setOption(chart, data);
+  
+        // 灏嗗浘琛ㄥ疄渚嬬粦瀹氬埌 this 涓婏紝鍙互鍦ㄥ叾浠栨垚鍛樺嚱鏁帮紙濡� dispose锛変腑璁块棶
+        this.chart = chart;
+
+        this.getDetail()
+  
+        // 娉ㄦ剰杩欓噷涓�瀹氳杩斿洖 chart 瀹炰緥锛屽惁鍒欎細褰卞搷浜嬩欢澶勭悊绛�
+        return chart;
+    });
+  },
+
+  getDetail() {
+    var that = this
+    this.setData({loading: true})
+    assessmentService.getDetail(app.globalData.accessToken.userId, this.data.period, {
+      success(data) {
+        let creditText = data.creditText
+        let year = data.period.split('/')[0]
+        let month = data.period.split('/')[1].split('-')[0]
+        let gradeDetails = [{
+          name: '鑷瘎寰楀垎',
+          detail: data.score
+        }, {
+          name: '椋庨櫓鎺掑悕',
+          detail: data.rank
+        }, {
+          name: '椋庨櫓绛夌骇',
+          detail: data.level
+        }, {
+          name: '鑷瘎鍛ㄦ湡',
+          detail: `${year}骞�${month}鏈坄
+        }, {
+          name: '鑷瘎鏃堕棿',
+          detail: moment(data.time).format("YYYY-MM-DD HH:mm")
+        }]
+        let losePointsItem = []
+        let losePoints = []
+        for (const key in data.loseScore) {
+          const s = data.loseScore[key];
+          if (Object.keys(s).length > 0) {
+            losePointsItem.push(key)
+            for (const key1 in s) {
+              const rule = s[key1];
+              let p = {
+                baseRule: key,
+                name: key1,
+                itemlist: []
+              }
+              rule.forEach(r => {
+                // fixme :  姝ゅ鏆傛椂灏嗐�愰楗�戠被鍨嬬殑浼佷笟璇勪及寤鸿鐨勭涓�鍙ヨ瘽鍒犻櫎
+                if (app.globalData.userInfo.extension2  === '1') {
+                  const i = r.third.indexOf('锛�')
+                  r.third = r.third.slice(i+1)
+                  r.third = r.third.replaceAll('浣�', '鎮�')
+                }
+                p.itemlist.push({
+                  ruleName: r.first,
+                  score: r.second,
+                  remark: r.third
+                })
+              });
+              losePoints.push(p)
+            }
+          }
+        }
+        let classPoints = {
+          score: data.score,
+          level: data.level,
+          indicator: [],
+          value: []
+        }
+        data.classScore.forEach(c => {
+          classPoints.indicator.push({
+            name: c.first,
+            max: c.second
+          })
+          classPoints.value.push(c.third)
+        });
+
+        that.setData({
+          creditText: creditText,
+          gradeDetails: gradeDetails,
+          losePoints: losePoints,
+          losePointsItem: losePointsItem
+        })
+        setOption(that.chart, classPoints)
+      },
+      complete() {
+        that.setData({loading: false})
+      }
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/mAssessment/gradereport/gradereport.json b/pages/mAssessment/gradereport/gradereport.json
new file mode 100644
index 0000000..8cf8e7c
--- /dev/null
+++ b/pages/mAssessment/gradereport/gradereport.json
@@ -0,0 +1,8 @@
+{
+  "navigationBarTitleText": "娴嬭瘎鍒嗘瀽",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "ec-canvas": "/component/ec-canvas/ec-canvas"
+  }
+}
\ No newline at end of file
diff --git a/pages/mAssessment/gradereport/gradereport.wxml b/pages/mAssessment/gradereport/gradereport.wxml
new file mode 100644
index 0000000..4b65c66
--- /dev/null
+++ b/pages/mAssessment/gradereport/gradereport.wxml
@@ -0,0 +1,58 @@
+<!--pages/gradedetail/gradedetail.wxml-->
+<view class="page">
+  <view class="banner-bg"></view>
+  <view class="page__bd">
+    <!-- 闆疯揪鍥� -->
+    <view class="radar-panel">
+      <ec-canvas id="mychart-dom-radar" canvas-id="mychart-radar" ec="{{ ec }}"></ec-canvas>
+    </view>
+    <!-- 寰楀垎瑙h -->
+    <view class="marks">
+      <image src="/res/icons/qmark1.png" class="mark"></image>
+      <image src="/res/icons/qmark2.png" class="mark"></image>
+    </view>
+    <view class="fyui-panel">
+      <view class="fyui-panel_title">鑷瘎瑙h</view>
+      <view class="fyui-panel_desc">{{creditText}}</view>
+    </view>
+    <!-- 寰楀垎璇︽儏 -->
+    <view class="fyui-panel gradient">
+      <view class="fyui-panel_title">寰楀垎璇︽儏</view>
+      <block wx:for="{{gradeDetails}}" wx:key="index">
+        <view class="flex-h">
+          <view>{{item.name}}</view>
+          <view>{{item.detail}}</view>
+        </view>
+      </block>
+    </view>
+    <!-- 澶卞垎鏉$洰 -->
+    <view class="fyui-panel fyui-panel__max">
+      <view class="fyui-panel_title">鑷瘎璇婃柇</view>
+      <view wx:if="{{losePoints.length > 0}}">
+        鏈娴嬭瘎涓昏褰卞搷绫诲埆涓�<text style="color: orange;font-weight: 600;font-size: 16px;" wx:for="{{losePointsItem}}" wx:key="index">{{index > 0 ? "銆�" : ""}}{{item}}</text>
+        绛夊叡璁�<text style="color: orange;font-weight: 600;font-size: 18px;">{{losePoints.length}}</text>椤癸紝鍏蜂綋璇婃柇鍙婂缓璁涓嬶細
+      </view>
+      <view wx:else="">鎮ㄦ湰娆¤嚜璇勬弧鍒嗭紝鏆傛棤璇婃柇寤鸿銆�</view>
+      <block wx:for="{{losePoints}}" wx:key="index">
+        <view class="{{index !=0 ? 'first' : ''}}">
+          <view class="fyui-panel_title">{{index + 1}}. 銆�<text style="color: orange;">{{item.baseRule}}</text>銆憑{item.name}}</view>
+          <block wx:for="{{item.itemlist}}" wx:for-item="rule" wx:key="index">
+            <view style="margin-top: 8px;border-top: 4px solid rgb(147, 250, 226);width: 30px;"></view>
+            <view class="fyui-panel_desc">
+              <view>鏉$洰锛�</view>{{rule.ruleName}}
+            </view>
+            <view class="fyui-panel_desc">
+              <view>{{rule.score < 0 ? '鎵e垎' : '鍔犲垎'}}锛�</view><text style="{{rule.score < 0 ? 'color: orange;' : 'color: rgb(147, 250, 226);'}}">{{rule.score}}鍒�</text>
+            </view>
+            <view class="fyui-panel_desc">
+              <view>寤鸿锛�</view>{{rule.remark}}
+            </view>
+          </block>
+        </view>
+      </block>
+    </view>
+  </view>
+  <view class="page__ft">
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mAssessment/gradereport/gradereport.wxss b/pages/mAssessment/gradereport/gradereport.wxss
new file mode 100644
index 0000000..124bd72
--- /dev/null
+++ b/pages/mAssessment/gradereport/gradereport.wxss
@@ -0,0 +1,67 @@
+/* pages/gradedetail/gradedetail.wxss */
+.page__bd {
+  font-size: 14px;
+}
+.banner-bg {
+  position: fixed;
+  width: 100%;
+  height: 80vh;
+  background: linear-gradient(#57E4CB, white);
+}
+
+.radar-panel {
+  width: 100%;
+  height: 35vh;
+  color: #ffffffbe;
+}
+
+.fyui-panel {
+  padding: 16px 8px;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+  z-index: -1;
+}
+
+.gradient {
+  background: linear-gradient(#95f7e575, white);
+}
+
+.fyui-panel__max {
+  padding: 16px 18px;
+  margin-top: 1px;
+}
+
+.marks {
+  display: flex;
+  margin-left: 20px;
+  margin-bottom: -24px;
+  z-index: 1;
+}
+
+.mark {
+  width: 16px;
+  height: 30px;
+}
+
+.fyui-panel .flex-h {
+  margin-top: 6px;
+  padding: 0 4px;
+}
+
+.fyui-panel .first {
+  border-top: 1px rgba(214, 214, 214, 0.308) solid;
+  padding-top: 14px;
+}
+
+.fyui-panel .last {
+  border-bottom: 0px rgba(214, 214, 214, 0.308) solid;
+}
+
+.fyui-panel__max .fyui-panel_desc{
+  display: flex;
+}
+
+.fyui-panel__max .fyui-panel_desc>view{
+  white-space: nowrap;
+}
\ No newline at end of file
diff --git a/pages/mConsult/baseC/cResultItem/cResultItem.js b/pages/mConsult/baseC/cResultItem/cResultItem.js
new file mode 100644
index 0000000..2a5266e
--- /dev/null
+++ b/pages/mConsult/baseC/cResultItem/cResultItem.js
@@ -0,0 +1,85 @@
+/**
+ * 鏅鸿兘鍜ㄨ鏌ヨ缁撴灉鍒楄〃缁勪欢
+ */
+
+Component({
+  options: {
+    addGlobalClass: true,
+  },
+  /**
+   * 缁勪欢鐨勫睘鎬у垪琛�
+   */
+  properties: {
+    //鏌ヨ缁撴灉
+    results: {
+      type: Array,
+      value: []
+    },
+    scrollable: {
+      type: Boolean,
+      value: true
+    },
+    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/mConsult/consultdetail/consultdetail'
+          break;
+        case 2:
+          url = '/pages/mConsult/consultdetailitem/consultdetailitem'
+          break;
+        case 3:
+          url = '/pages/mConsult/consultdetailcase/consultdetailcase'
+          break;
+        case 4:
+          url = '/pages/mConsult/consultdetailqa/consultdetailqa'
+          break;
+        default:
+          break;
+      }
+      if (url != '') {
+        wx.navigateTo({
+          url: url,
+          success: (res) => {
+            res.eventChannel.emit('acceptDataFromOpenerPage', {
+              id: id
+            })
+          },
+        })
+      } else {
+        console.log('bSearch: gotoDetail, url涓虹┖');
+      }
+    },
+
+    gotoMore() {
+      this.triggerEvent('gotoMore')
+    }
+  }
+})
\ No newline at end of file
diff --git a/pages/mConsult/baseC/cResultItem/cResultItem.json b/pages/mConsult/baseC/cResultItem/cResultItem.json
new file mode 100644
index 0000000..d3aa8c8
--- /dev/null
+++ b/pages/mConsult/baseC/cResultItem/cResultItem.json
@@ -0,0 +1,6 @@
+{
+  "component": true,
+  "usingComponents": {
+    "mp-loadingstatus": "/component/loadingstatus/loadingstatus"
+  }
+}
\ No newline at end of file
diff --git a/pages/mConsult/baseC/cResultItem/cResultItem.wxml b/pages/mConsult/baseC/cResultItem/cResultItem.wxml
new file mode 100644
index 0000000..4db128b
--- /dev/null
+++ b/pages/mConsult/baseC/cResultItem/cResultItem.wxml
@@ -0,0 +1,143 @@
+<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" wx:if="{{item.punish || item.illegal || item.shotSpot || item.supervise || item.detained || item.minor}}">
+            <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">
+            <view class="qa-title">
+              <image class="icon" src="/res/icons/qa.png"></image>
+              <text class="fyui-box__content des subtitle">{{item.name}}锛�</text>
+            </view>
+          </view>
+          <view class="fyui-box__bd">
+            <!-- <view class="answer">
+              <image class="user-avator" src="/res/icons/con_qa.png"></image>
+              <view class="user-name">鐜繚鏅鸿兘鍔╂墜</view>
+            </view> -->
+            <view>
+              <!-- <view class="tag2">绛旓細</view> -->
+              <rich-text class="tag2 des" nodes="{{item.des}}"></rich-text>
+            </view>
+          </view>
+          <!-- <view class="fyui-box__ft">
+            <text>鎻愰棶鏃堕棿锛歿{item.time}}</text>
+            <text>鍥炲鏃堕棿锛歿{item.time}}</text>
+          </view> -->
+          <view class="fyui-box__ft_2" wx:if="{{item.punish || item.illegal || item.shotSpot || item.supervise}}">
+            <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.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>
+          </view>
+        </view>
+      </block>
+    </view>
+  </block>
+  <mp-loadingstatus scrollable="{{scrollable}}" loading="{{loading}}" needLoadMore="{{needLoadMore}}" nodata="{{results.length == 0}}" bindgotoMore="gotoMore"></mp-loadingstatus>
+</view>
\ No newline at end of file
diff --git a/pages/mConsult/baseC/cResultItem/cResultItem.wxss b/pages/mConsult/baseC/cResultItem/cResultItem.wxss
new file mode 100644
index 0000000..7d5d02a
--- /dev/null
+++ b/pages/mConsult/baseC/cResultItem/cResultItem.wxss
@@ -0,0 +1,126 @@
+/* --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;
+  align-items: center;
+  /* 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);
+}
+
+.qa-title {
+  display: flex;
+  align-items: flex-start;
+}
+
+.qa-title>image {
+  margin-right: 4px;
+  margin-top: 2px;
+}
+
+.user-avator {
+  width: 16px;
+  height: 16px;
+  border-radius: 50%;
+}
+
+.user-name {
+  color: var(--fyui-text-color_2);
+  font-size: 12px;
+  margin-left: 4px;
+}
\ No newline at end of file
diff --git a/pages/mConsult/behaviors/bConsultItem.js b/pages/mConsult/behaviors/bConsultItem.js
new file mode 100644
index 0000000..c184914
--- /dev/null
+++ b/pages/mConsult/behaviors/bConsultItem.js
@@ -0,0 +1,109 @@
+const consultservice = require("../../../service/consultservice")
+const app = getApp()
+
+/**
+ * 鏅鸿兘鍦ㄧ嚎鍜ㄨ鐨勬煡璇笌鏌ョ湅璇︽儏
+ */
+module.exports = Behavior({
+  data: {
+    result: []
+  },
+  methods:{
+    // onReachBottom () {
+    //   console.log('onReachBottom');
+    //   if (this.cPage && this.tPage) {
+    //     if (this.cPage < this.tPage) {
+    //       this.searchMore(this.cPage + 1)
+    //     }
+    //   }
+    // },
+    // searchMore (cPage = 1) {
+    //   var that = this
+    //   wx.showLoading({
+    //     title: '鎼滅储涓�',
+    //     mask: true,
+    //     success: (res) => {},
+    //     fail: (res) => {},
+    //     complete: (res) => {},
+    //   })
+    //   setTimeout(() => {
+    //     wx.hideLoading()
+    //   }, 20000);
+    //   consultservice.searchLaw(app.globalData.accessToken.userId, '澶ф皵姹℃煋', cPage, 5, {
+    //     onPage(head){
+    //       that.cPage = head.page
+    //       that.tPage = head.totalPage
+    //     },
+    //     success (res) {
+    //       let result = that.data.result
+    //       res.forEach(r => {
+    //         r.des = r.des.replace('\\n', '<br/>')
+    //         if (result.length === 0) {
+    //           result.push({
+    //             typeId: r.typeId,
+    //             typeName: r.typeName,
+    //             contents: [r]
+    //           })
+    //         } else {
+    //           result[0].contents.push(r)
+    //         }
+    //       });
+    //       that.setData({
+    //         result
+    //       })
+    //       console.log(result);
+    //     },
+    //     complete (res) {
+    //       wx.hideLoading()
+    //     }
+    //   }, 2)
+    // },
+    /**
+     * 鏌ョ湅鏌ヨ缁撴灉璇︽儏
+     */
+    gotoDetail (e) {
+      const iList = e.currentTarget.dataset.index.split(',')
+      const i1 = iList[0]
+      const i2 = iList[1]
+      const r = this.data.result[i1]
+      switch (r.typeId) {
+        //娉曞緥娉曡鏂囦欢
+        case 1:
+          const fileId = r.contents[i2].id
+          wx.navigateTo({
+            url: '/pages/mConsult/consultdetail/consultdetail',
+            success: (res) => {
+              // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+              res.eventChannel.emit('acceptDataFromOpenerPage', {
+                id: fileId
+              })
+            },
+          })
+          break;
+        //娉曞緥娉曡鏉$洰
+        case 2:
+          const itemId = r.contents[i2].id
+          wx.navigateTo({
+            url: '/pages/mConsult/consultdetailitem/consultdetailitem',
+            success: (res) => {
+              // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+              res.eventChannel.emit('acceptDataFromOpenerPage', {
+                id: itemId
+              })
+            },
+          })
+          break;
+        //鎵ф硶妗堜緥
+        case 3:
+  
+          break;
+        //鐜繚闂
+        case 4:
+  
+          break;
+        default:
+          break;
+      }
+    },
+  }
+})
\ No newline at end of file
diff --git a/pages/mConsult/behaviors/bElementTypes.js b/pages/mConsult/behaviors/bElementTypes.js
new file mode 100644
index 0000000..75ec0f4
--- /dev/null
+++ b/pages/mConsult/behaviors/bElementTypes.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/mConsult/behaviors/bQuestions.js b/pages/mConsult/behaviors/bQuestions.js
new file mode 100644
index 0000000..4783bda
--- /dev/null
+++ b/pages/mConsult/behaviors/bQuestions.js
@@ -0,0 +1,60 @@
+const bLoadingStatus = require("../../../base/behaviors/bLoadingStatus")
+const consultservice = require("../../../service/consultservice")
+const util = require("../../../utils/util")
+const app = getApp()
+
+/**
+ * 閫氳繃鍒嗙被鑾峰彇闂
+ */
+module.exports = Behavior({
+  behaviors: [bLoadingStatus],
+  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, perPage = this.data.perPage) {
+      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, perPage, {
+          onPage(head) {
+            that.setData({
+              cPage: head.page,
+              tPage: head.totalPage,
+              perPage: perPage,
+              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/mConsult/behaviors/bSearch.js b/pages/mConsult/behaviors/bSearch.js
new file mode 100644
index 0000000..34c1bb9
--- /dev/null
+++ b/pages/mConsult/behaviors/bSearch.js
@@ -0,0 +1,53 @@
+const bLoadingStatus = require("../../../base/behaviors/bLoadingStatus")
+const consultservice = require("../../../service/consultservice")
+const app = getApp()
+
+/**
+ * 鏅鸿兘鍦ㄧ嚎鍜ㄨ鐨勬悳绱㈤�昏緫
+ */
+module.exports = Behavior({
+  behaviors: [bLoadingStatus],
+  data: {
+    //鎼滅储缁撴灉
+    results: []
+  },
+  methods: {
+    loadmore(cPage) {
+      this.search(this.obj, ++cPage)
+    },
+    /**
+     * 鏍规嵁鍏抽敭瀛楀強鏌ヨ绫诲瀷鎼滅储
+     * @param keyword 鍏抽敭瀛楋紝鑻ュ叧閿瓧涓虹┖鐧斤紝鍒欐寜鐓х儹闂ㄧ殑閫昏緫鎼滅储
+     * @param type 鏌ヨ绫诲瀷锛屽寘鎷琜1锛氭硶瑙勬枃浠讹紝2锛氭硶瑙勬潯鐩紝3锛氭墽娉曟渚嬶紝4锛氱幆淇濋棶棰榏锛屼笉濉啓鏃惰〃绀烘煡璇㈡墍鏈夌被鍨嬬殑鍓�5鏉�
+     */
+    search(obj, cPage = 1, perPage = this.data.perPage) {
+      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, perPage, {
+        onPage(head) {
+          that.setData({
+            cPage: head.page,
+            tPage: head.totalPage,
+            perPage: perPage
+          })
+        },
+        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/mConsult/cResultItemSearch/cResultItemSearch.js b/pages/mConsult/cResultItemSearch/cResultItemSearch.js
new file mode 100644
index 0000000..bd22bff
--- /dev/null
+++ b/pages/mConsult/cResultItemSearch/cResultItemSearch.js
@@ -0,0 +1,69 @@
+const bSearch = require("../behaviors/bSearch")
+
+/**
+ * 鏅鸿兘鍜ㄨ鏌ヨ缁撴灉鍒楄〃缁勪欢
+ */
+
+Component({
+  behaviors: [bSearch],
+  /**
+   * 缁勪欢鐨勫睘鎬у垪琛�
+   */
+  properties: {
+    //鏌ヨ鏉′欢
+    keyobj: {
+      type: Object,
+      value: {
+        keyword: null,
+        type: undefined
+      },
+    },
+    reachBottom: {
+      type: Boolean,
+      value: false
+    },
+    scrollable: {
+      type: Boolean,
+      value: true
+    },
+    sPerPage: {
+      type: Number,
+      value: 10
+    }
+  },
+
+  observers: {
+    'keyobj': function (keyobj) {
+      if (keyobj != null && keyobj.keyword != null) {
+        this.search(keyobj, 1, this.data.sPerPage)        
+      }
+    },
+  },
+
+  /**
+   * 缁勪欢鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 缁勪欢鐨勬柟娉曞垪琛�
+   */
+  methods: {
+    gotoMore() {
+      this.triggerEvent('gotoMore')
+      const {keyword, type} = this.data.keyobj
+      wx.navigateTo({
+        url: '/pages/mConsult/consultresultmore/consultresultmore',
+        success: (res) => {
+          // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+          res.eventChannel.emit('acceptDataFromOpenerPage', {
+            typeId: type,
+            keyword: keyword
+          })
+        },
+      })
+    }
+  }
+})
\ No newline at end of file
diff --git a/pages/mConsult/cResultItemSearch/cResultItemSearch.json b/pages/mConsult/cResultItemSearch/cResultItemSearch.json
new file mode 100644
index 0000000..7f75b51
--- /dev/null
+++ b/pages/mConsult/cResultItemSearch/cResultItemSearch.json
@@ -0,0 +1,6 @@
+{
+  "component": true,
+  "usingComponents": {
+    "c-result-item": "../baseC/cResultItem/cResultItem"
+  }
+}
\ No newline at end of file
diff --git a/pages/mConsult/cResultItemSearch/cResultItemSearch.wxml b/pages/mConsult/cResultItemSearch/cResultItemSearch.wxml
new file mode 100644
index 0000000..122be6e
--- /dev/null
+++ b/pages/mConsult/cResultItemSearch/cResultItemSearch.wxml
@@ -0,0 +1 @@
+<c-result-item results="{{results}}" loading="{{loading}}" needLoadMore="{{needLoadMore}}" scrollable="{{scrollable}}" bindgotoMore="gotoMore"></c-result-item>
\ No newline at end of file
diff --git a/pages/mConsult/cResultItemSearch/cResultItemSearch.wxss b/pages/mConsult/cResultItemSearch/cResultItemSearch.wxss
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/pages/mConsult/cResultItemSearch/cResultItemSearch.wxss
diff --git a/pages/mConsult/cResultItemTab/cResultItemTab.js b/pages/mConsult/cResultItemTab/cResultItemTab.js
new file mode 100644
index 0000000..65dbe52
--- /dev/null
+++ b/pages/mConsult/cResultItemTab/cResultItemTab.js
@@ -0,0 +1,43 @@
+// pages/mConsult/cResultItemTab/cResultItemTab.js
+Component({
+  /**
+   * 缁勪欢鐨勫睘鎬у垪琛�
+   */
+  properties: {
+    tabList: [
+      {name: '鐑棬',tag: 0}, 
+      {name: '闂瓟',tag: 0}, 
+      {name: '妗堜緥',tag: 0}, 
+      {name: '鏉$洰',tag: 0}, 
+      {name: '鏂囦欢',tag: 0}, 
+    ],
+    refresh: false,
+    keywords: [
+      {keyword: '', type: undefined},
+      {keyword: '', type: 1},
+      {keyword: '', type: 2},
+      {keyword: '', type: 3},
+      {keyword: '', type: 4},
+    ],
+    reachBottom: [false, false, false, false, false],
+    tabIndex: 0
+  },
+
+  /**
+   * 缁勪欢鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 缁勪欢鐨勬柟娉曞垪琛�
+   */
+  methods: {
+    onTabChange(e) {
+      this.setData({
+        tabIndex: e.detail
+      })
+    }
+  }
+})
diff --git a/pages/mConsult/cResultItemTab/cResultItemTab.json b/pages/mConsult/cResultItemTab/cResultItemTab.json
new file mode 100644
index 0000000..9248c3d
--- /dev/null
+++ b/pages/mConsult/cResultItemTab/cResultItemTab.json
@@ -0,0 +1,7 @@
+{
+  "component": true,
+  "usingComponents": {
+    "switch-tab": "/component/switchtab/switchtab",
+    "c-result-item-search": "../cResultItemSearch/cResultItemSearch"
+  }
+}
\ No newline at end of file
diff --git a/pages/mConsult/cResultItemTab/cResultItemTab.wxml b/pages/mConsult/cResultItemTab/cResultItemTab.wxml
new file mode 100644
index 0000000..836785e
--- /dev/null
+++ b/pages/mConsult/cResultItemTab/cResultItemTab.wxml
@@ -0,0 +1,7 @@
+<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>
\ No newline at end of file
diff --git a/pages/mConsult/cResultItemTab/cResultItemTab.wxss b/pages/mConsult/cResultItemTab/cResultItemTab.wxss
new file mode 100644
index 0000000..82ffef4
--- /dev/null
+++ b/pages/mConsult/cResultItemTab/cResultItemTab.wxss
@@ -0,0 +1 @@
+/* pages/mConsult/cResultItemTab/cResultItemTab.wxss */
\ No newline at end of file
diff --git a/pages/mConsult/consultdetail/consultdetail.js b/pages/mConsult/consultdetail/consultdetail.js
new file mode 100644
index 0000000..9bd10b9
--- /dev/null
+++ b/pages/mConsult/consultdetail/consultdetail.js
@@ -0,0 +1,113 @@
+// pages/mConsult/consultdetail/consultdetail.js
+const consultservice = require("../../../service/consultservice")
+const moment = require('../../../utils/moment.min')
+const app = getApp()
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    id: 'Zi5EEhijAKugYeHe',
+    content: {}
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    var that = this
+    this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function (data) {
+      that.setData({
+        id: data.id
+      })
+
+      that.getFile()
+    })
+    // that.getFile()
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  getFile () {
+    var that = this
+    wx.showLoading({
+      title: '鍔犺浇涓�',
+      mask: true,
+      success: (res) => {},
+      fail: (res) => {},
+      complete: (res) => {},
+    })
+    setTimeout(() => {
+      wx.hideLoading()
+    }, 20000);
+    consultservice.getMgtFile(app.globalData.accessToken.userId, this.data.id, {
+      success (res) {
+        res.mfReleaseDate = that.formateTime(res.mfReleaseDate)
+        res.mfEffectiveDate = that.formateTime(res.mfEffectiveDate)
+        res.mfClosingDate = that.formateTime(res.mfClosingDate)
+        that.setData({
+          content: res
+        })
+      },
+      complete (res) {
+        wx.hideLoading()
+      }
+    })
+  },
+
+  formateTime (t) {
+    if (t) {
+      return moment(t).format("YYYY骞碝M鏈圖D鏃�") 
+    } else {
+      return undefined
+    }
+  },
+
+  openFile () {
+    let content = this.data.content
+    if (content.mfFileUrl == undefined || content.mfFileUrl == null || content.mfFileUrl.length == 0) {
+      wx.showToast({
+        title: '鏂囦欢鏆傛椂鏃犳硶璁块棶',
+        duration: 1000,
+        icon: 'none',
+        mask: true,
+      })
+      return
+    }
+    console.log(content.mfFileUrl);
+    wx.showLoading({
+      title: ' 鍔犺浇涓�',
+      mask: true,
+    })
+    wx.downloadFile({
+      url: content.mfFileUrl,
+      success: function (res) {
+        wx.hideLoading()
+        const filePath = res.tempFilePath
+        wx.openDocument({
+          filePath: filePath,
+          success: function (res) {
+            console.log('鎵撳紑鏂囨。鎴愬姛')
+          },
+          fail (error) {
+            console.log(error);
+          }
+        })
+      }
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/mConsult/consultdetail/consultdetail.json b/pages/mConsult/consultdetail/consultdetail.json
new file mode 100644
index 0000000..8e4d3a3
--- /dev/null
+++ b/pages/mConsult/consultdetail/consultdetail.json
@@ -0,0 +1,6 @@
+{
+  "navigationBarTitleText": "娉曞緥娉曡",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultdetail/consultdetail.wxml b/pages/mConsult/consultdetail/consultdetail.wxml
new file mode 100644
index 0000000..dabc857
--- /dev/null
+++ b/pages/mConsult/consultdetail/consultdetail.wxml
@@ -0,0 +1,37 @@
+<!--pages/mConsult/consultdetail/consultdetail.wxml-->
+<view class="page">
+  <view class="page__hd">
+    <view class="f-title">銆妠{content.mfName}}銆�</view>
+    <!-- <view class="f-tag">鍙戝竷鏃堕棿锛歿{content.mfReleaseDate}}</view> -->
+    <text class="f-summary" user-select="true" decode="true" space="emsp">銆愭憳瑕併�戯細{{content.mfSummary}}</text>
+  </view>
+  <view class="page__bd">
+    <view class="fyui-panel">
+      <!-- <view>绠�绉帮細{{content.mfShortName}}</view> -->
+      <view>鍙戝竷鍗曚綅锛歿{content.mfReleaseOrg}}</view>
+      <view>鏂囧彿锛歿{content.mfReferenceNumber}}</view>
+      <view>鏂囦欢绫诲埆锛歿{content.mfFileType}}</view>
+      <view>鏂囦欢绾у埆锛歿{content.mfMgtLevel}}</view>
+    </view>
+    <view class="fyui-panel">
+      <view>鐩稿叧琛屼笟锛歿{content.mfFileIndustry}}</view>
+      <view>鐜繚瑕佺礌锛歿{content.mfEpItemType}}銆亄{content.mfEpItemSubtype}}</view>
+      <!-- <view>鏂囦欢涓嬭浇</view> -->
+    </view>
+    <view class="fyui-panel">
+      <view>渚濇嵁锛歿{content.mfFileBasis}}</view>
+    </view>
+    <view class="fyui-panel">
+      <view>鍙戝竷鏃堕棿锛歿{content.mfReleaseDate}}</view>
+      <view>瀹炴柦鏃堕棿锛歿{content.mfEffectiveDate}}</view>
+      <view>淇鎯呭喌锛歿{content.mfFileRevise}}</view>
+    </view>
+    
+    <!-- <view class="fyui-panel">
+      <view>鍏抽敭璇嶏細{{content.mfKeywordLv1}}</view>
+    </view> -->
+  </view>
+  <view class="page__ft">
+    <view class="submit" bindtap="openFile">鏌ョ湅鏂囦欢</view>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mConsult/consultdetail/consultdetail.wxss b/pages/mConsult/consultdetail/consultdetail.wxss
new file mode 100644
index 0000000..4717673
--- /dev/null
+++ b/pages/mConsult/consultdetail/consultdetail.wxss
@@ -0,0 +1,32 @@
+/* pages/mConsult/consultdetail/consultdetail.wxss */
+.page__bd {
+  /* padding-left: 10px;
+  padding-right: 10px; */
+}
+.f-title {
+  font-size: 22px;
+  font-weight: 600;
+  color: var(--fyui-text-color_1);
+}
+
+.f-tag {
+  font-size: 12px;
+  color: var(--fyui-text-color_2);
+  text-align: end;
+  margin-bottom: 16px;
+}
+
+.f-summary {
+  font-size: 14px;
+  color: var(--fyui-text-color_2);
+}
+
+.fyui-panel{
+  padding: 8px;
+  font-size: 14px;
+  color: var(--fyui-text-color_1);
+}
+
+.fyui-panel>view{
+  margin-bottom: 4px;
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultdetailcase/consultdetailcase.js b/pages/mConsult/consultdetailcase/consultdetailcase.js
new file mode 100644
index 0000000..86828c0
--- /dev/null
+++ b/pages/mConsult/consultdetailcase/consultdetailcase.js
@@ -0,0 +1,96 @@
+// pages/mConsult/consultdetailcase/consultdetailcase.js
+const consultservice = require("../../../service/consultservice")
+const util = require("../../../utils/util")
+const app = getApp()
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    showloading: false,
+    case: {},
+    caseTag: [],
+
+    showDialog: false,
+    groups: [
+      'actionSlot1',
+    ]
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    var that = this
+    this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function (data) {
+      that.setData({
+        id: data.id
+      })
+      that.getCase()
+    })
+  },
+
+  getCase() {
+    this.setData({
+      showloading: true
+    })
+    var that = this
+    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: '娑夊強琛屾斂澶勭綒'})
+        if (res.ecIsIllegal) caseTag.push({icon: '/res/icons/cq_illegal.png', name: '娑夊強鍒戜簨璐d换'})
+        if (res.ecIsSupervise) caseTag.push({icon: '/res/icons/cq_supervise.png', name: '娑夊強鐜繚鐫e療瑕佺偣'})
+        if (res.ecIsShotspot) caseTag.push({icon: '/res/icons/cq_shotspot.png', name: '娑夊強鐜繚绠$悊鐑偣'})
+        if (res.ecIsMinor) caseTag.push({icon: '/res/icons/cq_minor.png', name: '娑夊強杞诲井杩濇硶'})
+        if (res.ecIsDetained) caseTag.push({icon: '/res/icons/cq_detained.png', name: '娑夊強琛屾斂鎷樼暀'})
+
+        res.ecSummary = res.ecSummary.replaceAll('\\n', '<br/>')
+        res.ecMeaning = res.ecMeaning.replaceAll('\\n', '<br/>')
+        res.ecExamined = res.ecExamined.replaceAll('\\n', '<br/>')
+        res.ecEnlightenment = res.ecEnlightenment.replaceAll('\\n', '<br/>')
+        res.ecOccurDate = util.formatTime(res.ecOccurDate)
+        that.setData({
+          case: res,
+          caseTag
+        })
+        console.log(res);
+      },
+      complete(res) {
+        that.setData({
+          showloading: false
+        })
+      }
+    })
+  },
+
+  openDialog: function () {
+    this.setData({
+      showDialog: true
+    })
+  },
+  closeDialog: function () {
+    this.setData({
+      showDialog: false
+    })
+  },
+  btnClick(e) {
+    console.log(e)
+    this.closeDialog()
+  },
+
+  previewImage(e) {
+    const i = e.currentTarget.dataset.index
+    // const img = this.data.case.ecAppendixUrl[i]
+    const remark = this.data.case.ecAppendixText[i]
+    const previewImageUrls = this.data.case.ecAppendixUrl;
+    this.setData({
+      previewImageUrls,
+      remark,
+      previewCurrent: 0,
+      showPreview: true
+    });
+  },
+})
\ No newline at end of file
diff --git a/pages/mConsult/consultdetailcase/consultdetailcase.json b/pages/mConsult/consultdetailcase/consultdetailcase.json
new file mode 100644
index 0000000..5ec34b0
--- /dev/null
+++ b/pages/mConsult/consultdetailcase/consultdetailcase.json
@@ -0,0 +1,11 @@
+{
+  "navigationBarTitleText": "妗堜緥璇︽儏",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "mp-loading": "/component/loading/loading",
+    "mp-actionSheet": "/component/actionsheet/actionsheet",
+    "mp-icon": "/component/icon/icon",
+    "my-gallery": "/component/mygallery/mygallery"
+  }
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultdetailcase/consultdetailcase.wxml b/pages/mConsult/consultdetailcase/consultdetailcase.wxml
new file mode 100644
index 0000000..fc3c8e9
--- /dev/null
+++ b/pages/mConsult/consultdetailcase/consultdetailcase.wxml
@@ -0,0 +1,78 @@
+<!--pages/mConsult/consultdetailcase/consultdetailcase.wxml-->
+<view class="page">
+  <view class="page__hd">
+    <view class="fyui-box  fyui-box__text">
+      <view class="fyui-box__hd">
+        <view>{{case.ecTitle}}</view>
+      </view>
+      <view class="fyui-box__bd">
+        <view class="q-tag" bindtap="openDialog">
+          <block wx:for="{{caseTag}}" wx:key="index">
+            <image src="{{item.icon}}"></image>
+          </block>
+        </view>
+      </view>
+      <view class="fyui-box__ft" style="flex-direction: column;">
+        <view class="flex-h" style="justify-content: flex-start;"><image class="image-16" src="/res/icons/locate.png"></image>妗堝彂鍦板潃锛歿{case.ecProvinceName + case.ecCityName}}</view>
+        <view class="flex-h" style="justify-content: flex-start;"><image class="image-16" src="/res/icons/time.png"></image>妗堝彂鏃堕棿锛歿{case.ecOccurDate}}</view>
+      </view>
+    </view>
+  </view>
+  <view class="page__bd">
+    <view class="fyui-panel flex-h">
+      <view class="flex-h" style="justify-content: flex-start;">
+        <image class="image-16" src="/res/icons/case_forfeit.png"></image>
+        缃氭鏁伴
+      </view>
+      <view style="color: red;">{{case.ecForfeit}}涓囧厓</view>
+    </view>
+    <view class="fyui-panel">
+      <view>妗堜緥绫诲埆锛歿{case.ecType}}</view>
+      <view>瑕佺礌绫诲埆锛歿{case.ecEpItemType}}</view>
+      <view>瑕佺礌瀛愮被锛歿{case.ecEpItemSubtype}}</view>
+    </view>
+    <view class="fyui-panel">
+      <view class="case-type">妗堟儏绠�浠�</view>
+      <view class="case-image-group" wx:for="{{case.ecAppendixUrl}}" wx:key="index">
+        <image src="{{item}}" mode="widthFix" bindtap="previewImage" data-index="{{index}}"></image>
+        <view>{{case.ecAppendixText[index]}}</view>
+      </view>
+      <rich-text nodes="{{case.ecSummary}}"></rich-text>
+    </view>
+    <view class="fyui-panel" style="background-color: #FFF8DE;">
+      <view class="case-type" style="background-color: #FFEBA6;">鏌ュ鎯呭喌</view>
+      <rich-text nodes="{{case.ecExamined}}"></rich-text>
+    </view>
+    <view class="fyui-panel" style="background-color: #E6F6FC;">
+      <view class="case-type" style="background-color: #AFEAFD;">妗堜緥鎰忎箟</view>
+      <rich-text nodes="{{case.ecMeaning}}"></rich-text>
+    </view>
+    <view class="fyui-panel" style="background-color: #E6FCF4;">
+      <view class="case-type" style="background-color: #AAFFE0;">妗堜欢鍚ず</view>
+      <rich-text nodes="{{case.ecEnlightenment}}"></rich-text>
+    </view>
+    <view class="fyui-panel q-link-group">
+      <view wx:if="{{case.ecIsAssociated}}" class="q-link">
+        <image src="/res/icons/link_1.png"></image>
+        鐩稿叧鏉$洰
+      </view>
+    </view>
+  </view>
+  <view class="page__ft">
+    <mp-loading duration="{{900}}" type="dot-gray" show="{{showloading}}" animated="{{true}}"></mp-loading>
+  </view>
+
+  <mp-actionSheet bindactiontap="btnClick" show="{{showDialog}}" actions="{{groups}}" showCancel="{{false}}">
+    <view slot="{{'actionSlot' + '1'}}" class="custom-action">
+      <image class="custom-action__bg" src="/res/icons/bg_star.png"></image>
+      <block wx:for="{{caseTag}}" wx:key="index">
+        <view class="custom-action__tag" style="{{questionTag.length == 1 ? 'flex: 1;' : ''}}">
+          <image src="{{item.icon}}"></image>
+          <view>{{item.name}}</view>
+        </view>
+      </block>
+    </view>
+  </mp-actionSheet>
+
+  <my-gallery hide-on-click="{{true}}" show-delete="{{false}}" show="{{showPreview}}" img-urls="{{previewImageUrls}}" current="{{previewCurrent}}" remark="{{remark}}"></my-gallery>
+</view>
\ No newline at end of file
diff --git a/pages/mConsult/consultdetailcase/consultdetailcase.wxss b/pages/mConsult/consultdetailcase/consultdetailcase.wxss
new file mode 100644
index 0000000..8225f07
--- /dev/null
+++ b/pages/mConsult/consultdetailcase/consultdetailcase.wxss
@@ -0,0 +1,105 @@
+/* pages/mConsult/consultdetailcase/consultdetailcase.wxss */
+.page__hd {
+  padding: 0;
+}
+
+.fyui-box .fyui-box__hd {
+  display: flex;
+}
+
+.q-tag {
+  display: flex;
+  justify-content: flex-end;
+}
+
+.q-tag>image {
+  width: 16px;
+  height: 16px;
+  /* background-color: red; */
+  padding: 4px;
+}
+
+.q-link-group {
+  display: flex;
+}
+
+.q-link{
+  display: flex;
+  align-items: center;
+  background-color: #CFFFF7;
+  color: #25D4B6;
+  padding: 6px 8px;
+  border-radius: 6px;
+}
+
+.q-link>image{
+  width: 16px;
+  height: 16px;
+}
+
+.fyui-box__bd {
+  margin-top: 8px;
+  font-size: 14px;
+}
+
+.custom-action {
+  position: relative;
+  min-height: 40vh;
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.custom-action__bg{
+  position: absolute;
+  top: 0;
+  left: 0;
+}
+
+.custom-action__tag{
+  font-size: 14px;
+  color: var(--fyui-text-color_1);
+  font-weight: 600;
+  width: 50%;
+  text-align: center;
+  z-index: 2;
+}
+
+.custom-action__tag>image{
+  width: 64px;
+  height: 64px;
+}
+
+.fyui-panel {
+  margin: 10px 0 0 0 ;
+  padding: 10px 16px;
+  font-size: 14px;
+  border-radius: 0;
+}
+
+.case-type {
+  display: inline-block;
+  border-radius: 8px;
+  background-color: #F6F6F6;
+  padding: 4px 12px;
+  font-size: 14px;
+  margin-bottom: 4px;
+}
+
+.case-image-group {
+  /* display: flex;
+  flex-direction: column;
+  justify-content: flex-start; */
+}
+
+.case-image-group>image {
+  width: 100%;
+}
+
+.case-image-group>view {
+  font-size: 12px;
+  text-align: center;
+  color: var(--fyui-text-color_3);
+  margin-bottom: 8px;
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultdetailitem/consultdetailitem.js b/pages/mConsult/consultdetailitem/consultdetailitem.js
new file mode 100644
index 0000000..d340856
--- /dev/null
+++ b/pages/mConsult/consultdetailitem/consultdetailitem.js
@@ -0,0 +1,105 @@
+// pages/mConsult/consultdetailitem/consultdetailitem.js
+const consultservice = require("../../../service/consultservice")
+const app = getApp()
+const behavior = require('../behaviors/bConsultItem')
+
+Page({
+  behaviors: [behavior],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    content:[],
+    more:[]
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    var that = this
+    this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function (data) {
+      that.setData({
+        id: data.id
+      })
+
+      that.getItem()
+    })
+    this.searchMore(1)
+  },
+
+  onReachBottom () {
+    console.log('onReachBottom');
+    if (this.cPage && this.tPage) {
+      if (this.cPage < this.tPage) {
+        this.searchMore(this.cPage + 1)
+      }
+    }
+  },
+  searchMore (cPage = 1) {
+    var that = this
+    wx.showLoading({
+      title: '鎼滅储涓�',
+      mask: true,
+      success: (res) => {},
+      fail: (res) => {},
+      complete: (res) => {},
+    })
+    setTimeout(() => {
+      wx.hideLoading()
+    }, 20000);
+    consultservice.searchLaw(app.globalData.accessToken.userId, '澶ф皵姹℃煋', cPage, 5, {
+      onPage(head){
+        that.cPage = head.page
+        that.tPage = head.totalPage
+      },
+      success (res) {
+        let result = that.data.result
+        res.forEach(r => {
+          r.des = r.des.replaceAll('\\n', '<br/>')
+          if (result.length === 0) {
+            result.push({
+              typeId: r.typeId,
+              typeName: r.typeName,
+              contents: [r]
+            })
+          } else {
+            result[0].contents.push(r)
+          }
+        });
+        that.setData({
+          result
+        })
+        console.log(result);
+      }, 
+      complete (res) {
+        wx.hideLoading()
+      }
+    }, 2)
+  },
+
+  getItem () {
+    var that = this
+    wx.showLoading({
+      title: '鍔犺浇涓�',
+      mask: true,
+      success: (res) => {},
+      fail: (res) => {},
+      complete: (res) => {},
+    })
+    setTimeout(() => {
+      wx.hideLoading()
+    }, 20000);
+    consultservice.getMgtItem(app.globalData.accessToken.userId, this.data.id, {
+      success (res) {
+        res.miItemContent = res.miItemContent.replaceAll('\\n', '<br/>')
+        that.setData({
+          content: res
+        })
+      },
+      complete (res) {
+        wx.hideLoading()
+      }
+    })
+  },
+})
\ No newline at end of file
diff --git a/pages/mConsult/consultdetailitem/consultdetailitem.json b/pages/mConsult/consultdetailitem/consultdetailitem.json
new file mode 100644
index 0000000..55ec7ef
--- /dev/null
+++ b/pages/mConsult/consultdetailitem/consultdetailitem.json
@@ -0,0 +1,6 @@
+{
+  "navigationBarTitleText": "娉曡缁嗗垯",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultdetailitem/consultdetailitem.wxml b/pages/mConsult/consultdetailitem/consultdetailitem.wxml
new file mode 100644
index 0000000..dcf8f47
--- /dev/null
+++ b/pages/mConsult/consultdetailitem/consultdetailitem.wxml
@@ -0,0 +1,52 @@
+<!--pages/mConsult/consultdetailitem/consultdetailitem.wxml-->
+<view class="page">
+  <!-- <view class="page__hd">
+      <view class="f-tag">鍙戝竷鏃堕棿锛歿{content.mfReleaseDate}}</view>
+  </view> -->
+  <view class="page__bd">
+    <view class="fyui-panel">
+      <rich-text class="f-title" nodes="{{content.miItemContent}}"></rich-text>
+
+      <!-- <view>绠�绉帮細{{content.mfShortName}}</view> -->
+
+    </view>
+
+    <view class="fyui-panel">
+      <view>鍏抽敭璇嶏細{{content.miKeyword}}</view>
+    </view>
+
+    <view class="fyui-panel">
+      <view>鏉ユ簮锛氥�妠{content.mfName}}銆�</view>
+      <view>绔犺妭锛歿{content.miChapterName}}</view>
+      <view>鏉$洰锛歿{content.miItemName}}</view>
+    </view>
+  </view>
+  <view class="page__ft">
+    <block wx:for="{{result}}" wx:key="i1" wx:for-item="catagory" wx:for-index="i1">
+      <view class="page__hd">
+        <view>鐩稿叧鏉$洰 ></view>
+      </view>
+      <view class="page__bd">
+        <view class="fyui-panel">
+          <block wx:if="{{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">
+                  <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.fileName}}銆� {{item.chapterName}}{{item.name ? ' ' + item.name : ''}}</text>
+                </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>
+            </view>
+          </block>
+        </view>
+      </view>
+    </block>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mConsult/consultdetailitem/consultdetailitem.wxss b/pages/mConsult/consultdetailitem/consultdetailitem.wxss
new file mode 100644
index 0000000..823aa66
--- /dev/null
+++ b/pages/mConsult/consultdetailitem/consultdetailitem.wxss
@@ -0,0 +1,89 @@
+/* pages/mConsult/consultdetailitem/consultdetailitem.wxss */
+/* .page__hd {
+  padding: 0;
+} */
+.page__ft{
+  text-align: start;
+}
+
+.f-title {
+  font-size: 17px;
+  font-weight: 600;
+  color: var(--fyui-text-color_1);
+}
+
+.f-tag {
+  font-size: 12px;
+  color: var(--fyui-text-color_2);
+  text-align: end;
+  margin-bottom: 16px;
+}
+
+.f-summary {
+  font-size: 14px;
+  color: var(--fyui-text-color_2);
+}
+
+.fyui-panel{
+  padding: 8px;
+  font-size: 14px;
+  color: var(--fyui-text-color_1);
+}
+
+.fyui-panel>view{
+  margin-bottom: 4px;
+}
+
+
+
+.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: 4;
+  width: 100%;
+  overflow: hidden;
+  /* text-overflow: ellipsis; */
+}
+
+.tag {
+  margin-bottom: 8px;
+}
+
+.subtitle{
+  font-size: 15px;
+}
+
+.tag2{
+  font-size: 12px;
+  color: var(--fyui-text-color_3);
+}
+
+.btn-more{
+  text-align: center;
+  background-color: white;
+  margin: 0 10px;
+  border-top: 1px solid var(--fyui-BG_1);
+  color: var(--fyui-text-color_2);
+  padding: 8px;
+  font-size: 12px;
+}
+
+.btn-more:active{
+  background-color: var(--fyui-BG-COLOR-ACTIVE);
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultdetailqa/consultdetailqa.js b/pages/mConsult/consultdetailqa/consultdetailqa.js
new file mode 100644
index 0000000..e2caf2d
--- /dev/null
+++ b/pages/mConsult/consultdetailqa/consultdetailqa.js
@@ -0,0 +1,108 @@
+// pages/mConsult/consultdetailqa/consultdetailqa.js
+const consultservice = require("../../../service/consultservice")
+const app = getApp()
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    showloading: false,
+    question: {},
+    //闂娑夊強鐨勯」鐩�
+    questionTag: [{
+      icon: '',
+      name: ''
+    }],
+    answers: [],
+
+    showDialog: false,
+    groups: [
+      'actionSlot1',
+      // { text: '绀轰緥鑿滃崟', value: 1 },
+      // { text: '绀轰緥鑿滃崟', value: 2 },
+      // { text: '璐熷悜鑿滃崟', type: 'warn', value: 3 }
+    ]
+},
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    var that = this
+    this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function (data) {
+      that.setData({
+        id: data.id
+      })
+
+      that.getQuestion()
+      that.getAnswers()
+    })
+  },
+
+  getQuestion() {
+    this.setData({
+      showloading: true
+    })
+    var that = this
+    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: '娑夊強琛屾斂澶勭綒'})
+        if (res.cqIsIllegal) questionTag.push({icon: '/res/icons/cq_illegal.png', name: '娑夊強鍒戜簨璐d换'})
+        if (res.cqIsSupervise) questionTag.push({icon: '/res/icons/cq_supervise.png', name: '娑夊強鐜繚鐫e療瑕佺偣'})
+        if (res.cqIsShotspot) questionTag.push({icon: '/res/icons/cq_shotspot.png', name: '娑夊強鐜繚绠$悊鐑偣'})
+        that.setData({
+          question: res,
+          questionTag
+        })
+        console.log(res);
+      },
+      complete(res) {
+        that.setData({
+          showloading: false
+        })
+      }
+    })
+  },
+
+  getAnswers() {
+    this.setData({
+      showloading: true
+    })
+    var that = this
+    consultservice.getAnswers(app.globalData.accessToken.userId, this.data.id, {
+      success(res) {
+        res.forEach(r => {
+          r.saContent = r.saContent.replaceAll('\\n', '<br/>')
+        });
+        that.setData({
+          answers: res
+        })
+        console.log(res);
+      },
+      complete(res) {
+        that.setData({
+          showloading: false
+        })
+      }
+    })
+  },
+
+
+  openDialog: function () {
+    this.setData({
+      showDialog: true
+    })
+  },
+  closeDialog: function () {
+    this.setData({
+      showDialog: false
+    })
+  },
+  btnClick(e) {
+    console.log(e)
+    this.closeDialog()
+  }
+})
\ No newline at end of file
diff --git a/pages/mConsult/consultdetailqa/consultdetailqa.json b/pages/mConsult/consultdetailqa/consultdetailqa.json
new file mode 100644
index 0000000..b3fcf90
--- /dev/null
+++ b/pages/mConsult/consultdetailqa/consultdetailqa.json
@@ -0,0 +1,10 @@
+{
+  "navigationBarTitleText": "鐜繚闂瓟",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "mp-loading": "/component/loading/loading",
+    "mp-actionSheet": "/component/actionsheet/actionsheet",
+    "mp-icon": "/component/icon/icon"
+  }
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultdetailqa/consultdetailqa.wxml b/pages/mConsult/consultdetailqa/consultdetailqa.wxml
new file mode 100644
index 0000000..190f042
--- /dev/null
+++ b/pages/mConsult/consultdetailqa/consultdetailqa.wxml
@@ -0,0 +1,72 @@
+<!--pages/mConsult/consultdetailqa/consultdetailqa.wxml-->
+<view class="page">
+  <view class="page__hd">
+    <view class="fyui-box  fyui-box__text">
+      <view class="fyui-box__hd">
+        <view>{{question.cqContent}}</view>
+      </view>
+      <view class="fyui-box__bd">
+        <view class="q-tag" bindtap="openDialog">
+          <block wx:for="{{questionTag}}" wx:key="index">
+            <image src="{{item.icon}}"></image>
+          </block>
+          <!-- <image wx:if="{{question.cqIsPunish}}" src="/res/icons/cq_punish.png"></image>
+          <image wx:if="{{question.cqIsIllegal}}" src="/res/icons/cq_illegal.png"></image>
+          <image wx:if="{{question.cqIsSupervise}}" src="/res/icons/cq_supervise.png"></image>
+          <image wx:if="{{question.cqIsShotspot}}" src="/res/icons/cq_shotspot.png"></image> -->
+        </view>
+      </view>
+      <view class="fyui-box__ft" style="flex-direction: column;">
+        <view>鍏眥{answers.length}}鏉″洖绛�</view>
+        <view class="q-link-group">
+          <view wx:if="{{question.cqIsAssociated}}" class="q-link">
+            <image src="/res/icons/link_1.png"></image>
+            鐩稿叧鏉$洰
+          </view>
+        </view>
+      </view>
+    </view>
+  </view>
+  <view class="page__bd">
+    <block wx:for="{{answers}}" wx:for-index="index" wx:key="index">
+      <view class="fyui-box  fyui-box__text">
+        <view class="fyui-box__hd">
+          <image class="user-avator" src="/res/icons/con_qa.png"></image>
+          <view>
+            <view class="user-name">鐜繚鏅鸿兘鍔╂墜</view>
+            <view class="user-tag">鐜繚鏅鸿兘鍔╂墜</view>
+          </view>
+        </view>
+        <view class="fyui-box__bd">
+          <!-- <view class="fyui-box__content tag">鐩稿叧琛屼笟 -> {{item.fileIndustry}}</view> -->
+          <rich-text nodes="{{item.saContent}}" class=""></rich-text>
+        </view>
+        <view class="a-tag-group">
+          <view class="a-tag">
+            <image class="image-16" src="/res/icons/favourite.png"></image>156
+          </view>
+          <view class="a-tag">
+            <image class="image-16" src="/res/icons/like.png"></image>156
+          </view>
+        </view>
+      </view>
+      <view wx:if="{{index < answers.length - 1}}" class="next-answer"></view>
+      <view wx:else class="next-answer">鈥斺�斿埌搴曚簡鈥斺��</view>
+    </block>
+  </view>
+  <view class="page__ft">
+    <mp-loading duration="{{900}}" type="dot-gray" show="{{showloading}}" animated="{{true}}"></mp-loading>
+  </view>
+
+  <mp-actionSheet bindactiontap="btnClick" show="{{showDialog}}" actions="{{groups}}" showCancel="{{false}}">
+    <view slot="{{'actionSlot' + '1'}}" class="custom-action">
+      <image class="custom-action__bg" src="/res/icons/bg_star.png"></image>
+      <block wx:for="{{questionTag}}" wx:key="index">
+        <view class="custom-action__tag" style="{{questionTag.length == 1 ? 'flex: 1;' : ''}}">
+          <image src="{{item.icon}}"></image>
+          <view>{{item.name}}</view>
+        </view>
+      </block>
+    </view>
+  </mp-actionSheet>
+</view>
\ No newline at end of file
diff --git a/pages/mConsult/consultdetailqa/consultdetailqa.wxss b/pages/mConsult/consultdetailqa/consultdetailqa.wxss
new file mode 100644
index 0000000..2befc88
--- /dev/null
+++ b/pages/mConsult/consultdetailqa/consultdetailqa.wxss
@@ -0,0 +1,114 @@
+/* pages/mConsult/consultdetailqa/consultdetailqa.wxss */
+.page__hd {
+  padding: 0;
+}
+
+.fyui-box .fyui-box__hd {
+  display: flex;
+}
+
+.q-tag {
+  display: flex;
+  justify-content: flex-end;
+}
+
+.q-tag>image {
+  width: 16px;
+  height: 16px;
+  /* background-color: red; */
+  padding: 4px;
+}
+
+.q-link-group {
+  display: flex;
+  justify-content: flex-end;
+}
+
+.q-link{
+  display: flex;
+  align-items: center;
+  background-color: #CFFFF7;
+  color: #25D4B6;
+  padding: 6px 8px;
+  border-radius: 6px;
+}
+
+.q-link>image{
+  width: 16px;
+  height: 16px;
+}
+
+.fyui-box .fyui-box__hd .user-avator{
+  width: 36px;
+  height: 36px;
+  border-radius: 50%;
+}
+
+.fyui-box .fyui-box__hd .user-name{
+  margin-left: 8px;
+  font-size: 14px;
+  font-weight: 500;
+  color: var(--fyui-text-color_1);
+}
+
+.user-tag {
+  margin-left: 8px;
+  font-size: 10px;
+  font-weight: 100;
+  color: var(--fyui-text-color_2);
+}
+
+.fyui-box__bd {
+  margin-top: 8px;
+  font-size: 14px;
+}
+
+.next-answer {
+  text-align: center;
+  font-size: 12px;
+  color: var(--fyui-text-color_3);
+  padding: 8px;
+}
+
+.a-tag-group {
+  display: flex;
+  justify-content: flex-end;
+  color: var(--fyui-text-color_3);
+  font-size: 12px;
+}
+
+.a-tag {
+  display: flex;
+  align-items: center;
+  line-height: 20px;
+  margin-left: 8px;
+}
+
+.custom-action {
+  position: relative;
+  min-height: 40vh;
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.custom-action__bg{
+  position: absolute;
+  top: 0;
+  left: 0;
+}
+
+.custom-action__tag{
+  font-size: 14px;
+  color: var(--fyui-text-color_1);
+  font-weight: 600;
+  width: 50%;
+  text-align: center;
+  z-index: 2;
+}
+
+.custom-action__tag>image{
+  width: 64px;
+  height: 64px;
+}
\ No newline at end of file
diff --git a/pages/mConsult/consulthome/consulthome.js b/pages/mConsult/consulthome/consulthome.js
new file mode 100644
index 0000000..a00aece
--- /dev/null
+++ b/pages/mConsult/consulthome/consulthome.js
@@ -0,0 +1,101 @@
+// pages/mConsult/consulthome/consulthome.js
+
+Page({
+  // behaviors: [behavior],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    searchTips: '璇疯緭鍏ュ叧閿瓧鎼滅储',
+    tabList: [{
+      name: '鐑棬',
+      tag: 0
+    }, {
+      name: '闂瓟',
+      tag: 0
+    }, {
+      name: '妗堜緥',
+      tag: 0
+    }, {
+      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()
+  },
+
+  onReachBottom() {
+    let reachBottom = [false, false, false, false, false]
+    reachBottom[this.data.tabIndex] = true
+    this.setData({reachBottom})
+  },
+
+  // 鎼滅储
+  gotoSearch() {
+    wx.navigateTo({
+      url: "/pages/mConsult/consultsearch/consultsearch"
+    })
+  },
+
+  // 鍔熻兘鎸夐挳
+  goto(e) {
+    var url = ""
+    var index = e.currentTarget.dataset.index
+    switch (index) {
+      case "0":
+        url = "/pages/mConsult/consultproblem/consultproblem"
+        break;
+      case "1":
+        url = "/pages/mConsult/consultsearch/consultsearch"
+        break;
+      case "2":
+        url = "/pages/mConsult/consultonline/consultonline"
+        break;
+    }
+    if (url != "") {
+      wx.navigateTo({
+        url: url
+      })
+    } else {
+      wx.showToast({
+        title: '鍔熻兘鏁鏈熷緟',
+        duration: 1000,
+        icon: 'none',
+        mask: true,
+      })
+    }
+  },
+
+  loadingDone(e){
+    this.setData({
+      refresh: false
+    })
+    this.setData({
+      refresh: true
+    })
+  },
+
+  onTabChange(e) {
+    // console.log(e.detail);
+    this.setData({
+      tabIndex: e.detail
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/mConsult/consulthome/consulthome.json b/pages/mConsult/consulthome/consulthome.json
new file mode 100644
index 0000000..9df7092
--- /dev/null
+++ b/pages/mConsult/consulthome/consulthome.json
@@ -0,0 +1,10 @@
+{
+  "navigationBarTitleText": "鏅鸿兘鍜ㄨ",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "mp-icon": "/component/icon/icon",
+    "switch-tab": "/component/switchtab/switchtab",
+    "c-result-item-search": "../cResultItemSearch/cResultItemSearch"
+  }
+}
\ No newline at end of file
diff --git a/pages/mConsult/consulthome/consulthome.wxml b/pages/mConsult/consulthome/consulthome.wxml
new file mode 100644
index 0000000..38e1876
--- /dev/null
+++ b/pages/mConsult/consulthome/consulthome.wxml
@@ -0,0 +1,41 @@
+<!--pages/mConsult/consulthome/consulthome.wxml-->
+<view class="page">
+  <view class="page__hd">
+    <view class="search-bar" bindtap="gotoSearch">
+      <mp-icon icon="search" size="15" color="black"></mp-icon>
+      <text>{{searchTips}}</text>
+    </view>
+    <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" />
+        <view class="card-title">鐜繚闂</view>
+        <view class="card-abstract">甯歌浼佷笟闂</view>
+        <image src="/res/icons/con_pro.png" mode="aspectFit" class="icon"></image>
+      </view>
+      <view class="divider"></view>
+      <view class="card middle" bindtap="goto" data-index="1">
+        <image src="/res/icons/con_lib_bg.png" class="card-bg" mode="scaleToFill" />
+        <view class="card-title">鐜繚鐭ヨ瘑搴�</view>
+        <view class="card-abstract">鐢熸�佺幆澧冩硶寰嬫硶瑙�</view>
+        <image src="/res/icons/con_lib.png" mode="aspectFit" class="icon"></image>
+      </view>
+      <view class="divider"></view>
+      <view class="card" bindtap="goto" data-index="2">
+        <image src="/res/icons/con_qa_bg.png" class="card-bg" mode="scaleToFill" />
+        <view class="card-title">鏅鸿兘鍜ㄨ</view>
+        <view class="card-abstract">鐜繚鏅鸿兘鍔╂墜</view>
+        <image src="/res/icons/con_qa.png" mode="aspectFit" class="icon"></image>
+      </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>
+  <view class="page__ft"></view>
+</view>
\ No newline at end of file
diff --git a/pages/mConsult/consulthome/consulthome.wxss b/pages/mConsult/consulthome/consulthome.wxss
new file mode 100644
index 0000000..6606e04
--- /dev/null
+++ b/pages/mConsult/consulthome/consulthome.wxss
@@ -0,0 +1,54 @@
+/* pages/mConsult/consulthome/consulthome.wxss */
+.page__bd {
+  /* padding: 10px; */
+}
+
+.search-bar {
+  min-width: 50vw;
+  padding: 6px 8px;
+  font-size: 12px;
+  line-height: 24px;
+  color: var(--fyui-text-color_2);
+  text-align: left;
+  background-color: white;
+  border-radius: 10px;
+  margin-bottom: 8px;
+}
+
+.card {
+  position: relative;
+  /* background-color: cyan; */
+  border-radius: 10px;
+  padding: 6px;
+  text-align: center;
+  flex: 1;
+}
+
+.card:active {
+  background-color: var(--fyui-BG-COLOR-ACTIVE);
+}
+
+.card .card-bg {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: -1;
+}
+
+.divider {
+  width: 8px;
+}
+.card .card-title {
+  font-size: 16px;
+  font-weight: bold;
+}
+
+.card .card-abstract {
+  font-size: 11px;
+  color: var(--fyui-text-color_2);
+}
+
+.card .icon {
+  height: 56px;
+  width: 60px;
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultonline/consultonline.js b/pages/mConsult/consultonline/consultonline.js
new file mode 100644
index 0000000..6f924f5
--- /dev/null
+++ b/pages/mConsult/consultonline/consultonline.js
@@ -0,0 +1,185 @@
+// pages/mConsult/consultonline/consultonline.js
+const bSearch = require("../behaviors/bSearch")
+const app = getApp()
+
+Page({
+  behaviors: [bSearch],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    userId: app.globalData.accessToken.userId,
+    record: [{
+        id: 'system',
+        time: '',
+        userId: 'system',
+        userName: '鏅鸿兘瀹㈡湇',
+        type: 0,
+        text: '灏婃暚鐨勭敤鎴凤紝灏忕櫧绔瘹涓烘偍鏈嶅姟锛屾偍鏈変粈涔堥棶棰樺憿',
+      }
+    ],
+
+    focus: false,
+    value: '',
+    placeholder: '璇疯緭鍏ユ兂瑕佹彁闂殑鍐呭'
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    this.setData({
+      userId: app.globalData.accessToken.userId
+    })
+  },
+
+  clearInput() {
+    this.setData({
+      value: '',
+      focus: true,
+    });
+  },
+
+  inputChange(e) {
+    this.setData({
+      value: e.detail.value
+    });
+  },
+
+  send() {
+    let record = this.data.record
+    record.push({
+      id: '',
+      time: '',
+      userId: app.globalData.accessToken.userId,
+      userName: app.globalData.userInfo.acountname,
+      type: 0,
+      text: this.data.value,
+    })
+    console.log('-----------chat------------------');
+    console.log(record);
+    console.log(this.data.userId);
+    this.lastKeyword = this.data.value
+    this.setData({
+      record,
+      value: ''
+    })
+
+    this.getAnswer()
+  },
+
+  getAnswer() {
+    this.search({
+      keyword: this.lastKeyword,
+      type: undefined
+    }, 1, 1)
+    // let record = this.data.record
+    // const r = {
+    //   id: 'system',
+    //   time: '',
+    //   userId: 'system',
+    //   userName: '鏅鸿兘瀹㈡湇',
+    //   type: 1,
+    //   text: {
+    //     tabList: [
+    //       {name: '闂瓟',tag: 0}, 
+    //       {name: '妗堜緥',tag: 0}, 
+    //       {name: '鏉$洰',tag: 0}, 
+    //       {name: '鏂囦欢',tag: 0}
+    //     ],
+    //     key1: {keyword: q, type: 1},
+    //     key2: {keyword: q, type: 2},
+    //     key3: {keyword: q, type: 3},
+    //     key4: {keyword: q, type: 4},
+    //     // pageList: p
+    //   },
+    // }
+    // this.data.record.push(r)
+    // let last = this.data.record.length - 1
+    // this.setData({
+    //   [`record[${last}]`]: r
+    // })
+    // this.setData({
+    //   record,
+    // })
+  },
+
+  loadComplete() {
+    const results = this.data.results
+    let record = this.data.record
+
+    if (results.length == 0) {
+      record.push({
+        id: 'system',
+        time: '',
+        userId: 'system',
+        userName: '鏅鸿兘瀹㈡湇',
+        type: 0,
+        text: '鎶辨瓑锛屾垜杩樹笉鐞嗚В鎮ㄧ殑鎰忔�濄�傝灏濊瘯閲嶆柊鍜ㄨ銆�'
+      })
+    } else {
+      record.push({
+        id: 'system',
+        time: '',
+        userId: 'system',
+        userName: '鏅鸿兘瀹㈡湇',
+        type: 0,
+        text: '灏忕櫧缁欐偍鎻愪緵鍙傝�冨涓嬶細'
+      })
+      const map = new Map()
+      results.sort((a, b) => {
+        return b.typeId - a.typeId
+      })
+      results.forEach(r => {
+        if (!map.has(r.typeName)) {
+          r.keyword = this.lastKeyword
+          map.set(r.typeName, [])
+          map.get(r.typeName).push(r)
+        }
+      });
+      const t = []
+      const p = []
+      for (let item of map) {
+        t.push({
+          name: item[0],
+          tag: 0
+        })
+        p.push(item[1])
+      }
+      record.push({
+        id: 'system',
+        time: '',
+        userId: 'system',
+        userName: '鏅鸿兘瀹㈡湇',
+        type: 1,
+        refresh: true,
+        text: {
+          tabList: t,
+          pageList: p
+        },
+      })
+    }
+    this.setData({
+      record,
+    })
+  },
+
+  gotoMore(e) {
+    const iList = e.currentTarget.dataset.index
+    const i1 = iList[0]
+    const i2 = iList[1]
+    const {keyword, typeId} = this.data.record[i1].text.pageList[i2][0]
+    console.log(keyword);
+    console.log(typeId);
+    wx.navigateTo({
+      url: '/pages/mConsult/consultresultmore/consultresultmore',
+      success: (res) => {
+        // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+        res.eventChannel.emit('acceptDataFromOpenerPage', {
+          typeId: typeId,
+          keyword: keyword
+        })
+      },
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/mConsult/consultonline/consultonline.json b/pages/mConsult/consultonline/consultonline.json
new file mode 100644
index 0000000..688c29d
--- /dev/null
+++ b/pages/mConsult/consultonline/consultonline.json
@@ -0,0 +1,11 @@
+{
+  "navigationBarTitleText": "鏅鸿兘鍜ㄨ",
+  "navigationBarBackgroundColor": "#EFF9F4",
+  "navigationBarTextStyle": "black",
+  "usingComponents": {
+    "mp-icon": "/component/icon/icon",
+    "switch-tab": "/component/switchtab/switchtab",
+    "c-result-item": "../baseC/cResultItem/cResultItem",
+    "c-result-item-search": "../cResultItemSearch/cResultItemSearch"
+  }
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultonline/consultonline.wxml b/pages/mConsult/consultonline/consultonline.wxml
new file mode 100644
index 0000000..7f7fb68
--- /dev/null
+++ b/pages/mConsult/consultonline/consultonline.wxml
@@ -0,0 +1,38 @@
+<!--pages/mConsult/consultonline/consultonline.wxml-->
+<view class="page">
+  <scroll-view class="consult-record" enable-passive="{{true}}" scroll-into-view="item{{record.length - 1}}"  scroll-y="true" show-scrollbar="{{false}}" scroll-with-animation="true">
+    <view id="item{{index}}" wx:for="{{record}}" wx:key="index" style="padding-bottom: 2px;">
+      <view wx:if="{{userId == item.userId}}" class="consult-record_itemUser">
+        <view class="consult-text_user">{{item.text}}</view>
+      </view>
+      <view wx:else class="consult-record_item">
+        <image wx:if="{{item.type == 0}}" src="/res/icons/con_qa.png" class="consult-avator"></image>
+        <view wx:if="{{item.type == 0}}" class="consult-text">{{item.text}}</view>
+        <view wx:elif="{{item.type == 1}}" class="consult-text consult-qa">
+          <switch-tab tabList="{{item.text.tabList}}" refresh="{{item.refresh}}">
+            <block wx:for="{{item.text.pageList}}" wx:key="i" wx:for-item="p" wx:for-index="i">
+              <c-result-item results="{{p}}" loading="{{false}}" needLoadMore="{{true}}" scrollable="{{false}}" slot="slot{{i}}" data-index="{{[index, i]}}" bindgotoMore="gotoMore"></c-result-item>
+            </block>
+            <!-- <c-result-item-search scrollable="{{false}}" slot="slot0" keyobj="{{item.text.key4}}" sPerPage="{{1}}" bindloadComplete="loadComplete"></c-result-item-search>
+            <c-result-item-search scrollable="{{false}}" slot="slot1" keyobj="{{item.text.key3}}" sPerPage="{{1}}"></c-result-item-search>
+            <c-result-item-search scrollable="{{false}}" slot="slot2" keyobj="{{item.text.key2}}" sPerPage="{{1}}"></c-result-item-search>
+            <c-result-item-search scrollable="{{false}}" slot="slot3" keyobj="{{item.text.key1}}" sPerPage="{{1}}"></c-result-item-search> -->
+          </switch-tab>
+        </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>
+    </view>
+  </scroll-view>
+  <view class="consult-input">
+    <view class="consult-input_box">
+      <view class="search-bar">
+        <!-- <mp-icon icon="search" size="15" color="black"></mp-icon> -->
+        <input type="text" class="search-bar__input" placeholder="{{placeholder}}" value="{{value}}" focus="{{focus}}" bindinput="inputChange" />
+        <text class="weui-icon-clear" hover-class="weui-active" wx:if="{{value.length > 0}}" bindtap="clearInput"></text>
+      </view>
+      <view wx:if="{{value.length > 0}}" class="btn" bindtap="send">鍙戦��</view>
+    </view>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mConsult/consultonline/consultonline.wxss b/pages/mConsult/consultonline/consultonline.wxss
new file mode 100644
index 0000000..08a5342
--- /dev/null
+++ b/pages/mConsult/consultonline/consultonline.wxss
@@ -0,0 +1,133 @@
+/* pages/mConsult/consultonline/consultonline.wxss */
+.page {
+  background-color: #EFF9F4;
+}
+
+.consult-record {
+  /* padding: 8px 0; */
+  background-color: #EFF9F4;
+  height: 88vh;
+}
+
+.consult-record_item {
+  display: flex;
+  align-items: flex-start;
+  justify-content: flex-start;
+  margin-bottom: 16px;
+  padding-left: 8px;
+}
+
+.consult-record_itemUser {
+  display: flex;
+  align-items: flex-start;
+  justify-content: flex-end;
+  margin-bottom: 16px;
+  padding-right: 8px;
+}
+
+.consult-avator {
+  width: 40px;
+  height: 40px;
+  border-radius: 50%;
+}
+
+.consult-text {
+  max-width: 80%;
+  margin-left: 4px;
+  padding: 10px;
+  background-color: white;
+  border: 0px solid #CCCCCC;
+  border-radius: 16px;
+  border-top-left-radius: 0;
+  box-shadow: 1px 1px #CCCCCC;
+  font-size: 12px;
+}
+
+.consult-qa {
+  padding: 0px;
+  width: 92%;
+  max-width: 100%;
+}
+
+.consult-text_user {
+  max-width: 80%;
+  margin-left: 4px;
+  padding: 10px;
+  /* background-color: #49c4ad; */
+  background: linear-gradient(to top right, #58bba9, #52e6ca);
+  border: 0px solid #CCCCCC;
+  border-radius: 16px;
+  border-top-right-radius: 0;
+  box-shadow: 1px 1px #CCCCCC;
+  font-size: 12px;
+  color: white;
+}
+
+
+.consult-input {
+  position: fixed;
+  bottom: 0;
+  /* padding-bottom: calc(10px + constant(safe-area-inset-bottom)); */
+  padding-bottom: calc(10px + env(safe-area-inset-bottom));
+  left: 0;
+  width: 100%;
+  /* height: 12vh; */
+  /* background-color: #a3be042f; */
+}
+
+.consult-input_box {
+  display: flex;
+  align-items: center;
+  padding: 0 8px;
+}
+
+.search-bar {
+  flex: 1;
+  position: relative;
+  min-width: 50vw;
+  padding: 6px 8px;
+  font-size: 12px;
+  line-height: 24px;
+  color: var(--fyui-text-color_2);
+  text-align: left;
+  background-color: white;
+  border-radius: 10px;
+  display: flex;
+  align-items: center;
+}
+
+.search-bar .weui-icon-clear {
+  /* position: absolute;
+  top: 50%;
+  right: 0;
+  margin-top: -16px; */
+  padding-left: 8px;
+  width: 16px;
+  height: 16px;
+  -webkit-mask-size: 16px;
+  mask-size: 16px;
+  /* display: block; */
+}
+
+.search-bar .search-bar__input {
+  width: 100%;
+  border: 0;
+  font-size: 14px;
+  line-height: 20px;
+  box-sizing: content-box;
+  background: transparent;
+  caret-color: var(--weui-BRAND);
+  color: var(--weui-FG-0);
+}
+
+.btn {
+  border-radius: 20px;
+  line-height: 20px;
+  font-size: 12px;
+  min-width: 40px;
+  background: linear-gradient(to top right, #58bba9, #52e6ca);
+  padding: 4px 2px;
+  text-align: center;
+  color: white;
+  margin-left: 4px;
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultproblem/consultproblem.js b/pages/mConsult/consultproblem/consultproblem.js
new file mode 100644
index 0000000..e27f5ab
--- /dev/null
+++ b/pages/mConsult/consultproblem/consultproblem.js
@@ -0,0 +1,45 @@
+import ListPage from '../../../base/ListPage'
+const bQuestions = require('../behaviors/bQuestions')
+const bElementTypes = require('../behaviors/bElementTypes')
+
+ListPage({
+  behaviors: [bQuestions, bElementTypes],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    selected: [{
+      name: '鍏ㄩ儴',
+      value: null
+    },{
+      name: '鍏ㄩ儴',
+      value: null
+    }],
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    const selectedValues = this.data.selected.map((obj, index) => {
+      return obj.value
+    })
+    this.getQuestionsByType(1, selectedValues)
+  },
+
+  openChooseType() {
+    this.setData({
+      showMenu: true
+    })
+  },
+
+  chooseMenu(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(1, [menu.value, item.value])
+  },
+})
\ No newline at end of file
diff --git a/pages/mConsult/consultproblem/consultproblem.json b/pages/mConsult/consultproblem/consultproblem.json
new file mode 100644
index 0000000..62d834f
--- /dev/null
+++ b/pages/mConsult/consultproblem/consultproblem.json
@@ -0,0 +1,9 @@
+{
+  "navigationBarTitleText": "甯歌闂",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "c-result-item": "../baseC/cResultItem/cResultItem",
+    "mp-sidebar": "/component/sidebar/sidebar"
+  }
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultproblem/consultproblem.wxml b/pages/mConsult/consultproblem/consultproblem.wxml
new file mode 100644
index 0000000..8725049
--- /dev/null
+++ b/pages/mConsult/consultproblem/consultproblem.wxml
@@ -0,0 +1,20 @@
+<!--pages/mConsult/consultproblem/consultproblem.wxml-->
+<import src="/template/nodata.wxml"></import>
+
+<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="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/mConsult/consultproblem/consultproblem.wxss b/pages/mConsult/consultproblem/consultproblem.wxss
new file mode 100644
index 0000000..fd8a88a
--- /dev/null
+++ b/pages/mConsult/consultproblem/consultproblem.wxss
@@ -0,0 +1,14 @@
+/* pages/mConsult/consultproblem/consultproblem.wxss */
+.page__hd {
+  background-color: white;
+  padding: 16px;
+}
+
+.filter {
+  display: flex;
+  align-items: center;
+}
+
+.filter:active {
+  background-color: var(--fyui-BG-COLOR-ACTIVE);
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultresult/consultresult.js b/pages/mConsult/consultresult/consultresult.js
new file mode 100644
index 0000000..8d26f63
--- /dev/null
+++ b/pages/mConsult/consultresult/consultresult.js
@@ -0,0 +1,70 @@
+// pages/mConsult/consultresult/consultresult.js
+const consultservice = require("../../../service/consultservice")
+const app = getApp()
+const behavior = require('../behaviors/bConsultItem')
+
+Page({
+  behaviors: [behavior],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    keyword: '',
+    tabList: [
+      {name: '鍏ㄩ儴',tag: 0}, 
+      {name: '闂瓟',tag: 0}, 
+      {name: '妗堜緥',tag: 0}, 
+      {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) {
+    var that = this
+    this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function (data) {
+      console.log(data);
+      that.setData({
+        keyAll: {keyword: data.keyword, type: undefined},
+        key1: {keyword: data.keyword, type: 1},
+        key2: {keyword: data.keyword, type: 2},
+        key3: {keyword: data.keyword, type: 3},
+        key4: {keyword: data.keyword, type: 4},
+      })
+
+      // that.search()
+    })
+  },
+
+  onReachBottom() {
+    let reachBottom = [false, false, false, false, false]
+    reachBottom[this.data.tabIndex] = true
+    this.setData({reachBottom})
+  },
+
+  loadingDone(e){
+    this.setData({
+      refresh: false
+    })
+    this.setData({
+      refresh: true
+    })
+  },
+
+  onTabChange(e) {
+    console.log(e.detail);
+    this.setData({
+      tabIndex: e.detail
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/mConsult/consultresult/consultresult.json b/pages/mConsult/consultresult/consultresult.json
new file mode 100644
index 0000000..c82e4a6
--- /dev/null
+++ b/pages/mConsult/consultresult/consultresult.json
@@ -0,0 +1,10 @@
+{
+  "navigationBarTitleText": "鎼滅储缁撴灉",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "mp-icon": "/component/icon/icon",
+    "switch-tab": "/component/switchtab/switchtab",
+    "c-result-item-search": "../cResultItemSearch/cResultItemSearch"
+  }
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultresult/consultresult.wxml b/pages/mConsult/consultresult/consultresult.wxml
new file mode 100644
index 0000000..00a6ed2
--- /dev/null
+++ b/pages/mConsult/consultresult/consultresult.wxml
@@ -0,0 +1,63 @@
+<!--pages/mConsult/consultresult/consultresult.wxml-->
+<import src="/template/nodata.wxml"></import>
+
+<view class="page">
+  <view class="page__hd">
+    <!-- <block wx:if="{{result.length > 0}}">
+      <block wx:for="{{result}}" wx:key="i1" wx:for-item="catagory" wx:for-index="i1">
+        <view><text style="color: #57E4CB;">{{keyword}}</text>鐨剓{catagory.typeName}} ></view>
+        <view class="fyui-panel">
+          <block wx:if="{{catagory.typeId === 1}}">
+            <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">
+                  {{item.name}}
+                </view>
+                <view class="fyui-box__bd">
+                  <view class="fyui-box__content tag">鐩稿叧琛屼笟 -> {{item.fileIndustry}}</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>
+            </view>
+
+          </block>
+          <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">
+                  <rich-text nodes="{{item.des}}" class="fyui-box__content des subtitle"></rich-text>
+                </view>
+                <view class="fyui-box__bd">
+                  <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">
+                  <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>
+            </view>
+          </block>
+        </view>
+        <view class="btn-more" data-typeid="{{catagory.typeId}}" bindtap="gotoMore">鏌ョ湅鏇村</view>
+      </block>
+    </block>
+    <template wx:else is="nodataPage"></template> -->
+
+    <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>
+
+  <view class="page__ft"></view>
+</view>
\ No newline at end of file
diff --git a/pages/mConsult/consultresult/consultresult.wxss b/pages/mConsult/consultresult/consultresult.wxss
new file mode 100644
index 0000000..b30290c
--- /dev/null
+++ b/pages/mConsult/consultresult/consultresult.wxss
@@ -0,0 +1,70 @@
+/* pages/mConsult/consultresult/consultresult.wxss */
+.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: 4;
+  width: 100%;
+  overflow: hidden;
+  /* text-overflow: ellipsis; */
+}
+
+.tag {
+  margin-bottom: 8px;
+}
+
+.subtitle{
+  font-size: 15px;
+}
+
+.tag2{
+  font-size: 12px;
+  color: var(--fyui-text-color_3);
+}
+
+.btn-more{
+  text-align: center;
+  background-color: white;
+  margin: 0 10px;
+  border-top: 1px solid var(--fyui-BG_1);
+  color: var(--fyui-text-color_2);
+  padding: 8px;
+  font-size: 12px;
+}
+
+.btn-more:active{
+  background-color: var(--fyui-BG-COLOR-ACTIVE);
+}
+
+.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);
+}
+
+.fyui-box__text .fyui-box__ft{
+  justify-content: flex-start;
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultresultmore/consultresultmore.js b/pages/mConsult/consultresultmore/consultresultmore.js
new file mode 100644
index 0000000..1f00d53
--- /dev/null
+++ b/pages/mConsult/consultresultmore/consultresultmore.js
@@ -0,0 +1,38 @@
+// pages/mConsult/consultresultmore/consultresultmore.js
+const app = getApp()
+
+Page({
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    keyobj: {keyword: null, type: undefined},
+    typeName: '',
+    //涓婃粦瑙﹀簳鍔犺浇
+    reachBottom: false
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    var that = this
+    this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function (data) {
+      console.log(data);
+      that.setData({
+        keyobj: {
+          keyword: data.keyword,
+          type: data.typeId,
+        },
+        typeName: app.cosultTypeName(data.typeId)
+      })
+
+    })
+  },
+
+  onReachBottom () {
+    this.setData({
+      reachBottom: true
+    })
+  },
+})
\ No newline at end of file
diff --git a/pages/mConsult/consultresultmore/consultresultmore.json b/pages/mConsult/consultresultmore/consultresultmore.json
new file mode 100644
index 0000000..2bcf511
--- /dev/null
+++ b/pages/mConsult/consultresultmore/consultresultmore.json
@@ -0,0 +1,8 @@
+{
+  "navigationBarTitleText": "鏇村缁撴灉",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "c-result-item-search": "../cResultItemSearch/cResultItemSearch"
+  }
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultresultmore/consultresultmore.wxml b/pages/mConsult/consultresultmore/consultresultmore.wxml
new file mode 100644
index 0000000..0b87f98
--- /dev/null
+++ b/pages/mConsult/consultresultmore/consultresultmore.wxml
@@ -0,0 +1,10 @@
+<!--pages/mConsult/consultresultmore/consultresultmore.wxml-->
+<view class="page">
+    <view class="page__hd">
+      <view><text style="color: #57E4CB;">{{keyobj.keyword}}</text>鐨剓{typeName}} ></view>
+    </view>
+    <view class="page__bd">
+      <c-result-item-search reachBottom="{{reachBottom}}" keyobj="{{keyobj}}"></c-result-item-search>
+    </view>
+  <view class="page__ft"></view>
+</view>
diff --git a/pages/mConsult/consultresultmore/consultresultmore.wxss b/pages/mConsult/consultresultmore/consultresultmore.wxss
new file mode 100644
index 0000000..98b5fbb
--- /dev/null
+++ b/pages/mConsult/consultresultmore/consultresultmore.wxss
@@ -0,0 +1,4 @@
+/* pages/mConsult/consultresult/consultresult.wxss */
+.page__hd {
+  padding-bottom: 8px;
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultsearch/consultsearch.js b/pages/mConsult/consultsearch/consultsearch.js
new file mode 100644
index 0000000..95b80fd
--- /dev/null
+++ b/pages/mConsult/consultsearch/consultsearch.js
@@ -0,0 +1,140 @@
+// pages/mConsult/consultsearch/consultsearch.js
+const consultservice = require("../../../service/consultservice")
+const app = getApp()
+
+Page({
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    focus: false,
+    placeholder: '鎼滅储',
+    value: '',
+
+    history: [],
+
+    hotTopic: [],
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad: function (options) {
+    this.getHotTopic()
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady: function () {
+
+  },
+
+  onShow: function () {
+    this.getLocalHistory()
+  },
+
+  clearInput() {
+    this.setData({
+      value: '',
+      focus: true,
+      result: []
+    });
+  },
+
+  inputChange(e) {
+    this.setData({
+      value: e.detail.value
+    });
+  },
+
+  /**
+   * 鎼滅储
+   */
+  search() {
+    if (this.data.value.length == 0) {
+      wx.navigateBack({
+        delta: 1,
+      })
+      return
+    }
+    var that = this
+    wx.navigateTo({
+      url: '/pages/mConsult/consultresult/consultresult',
+      success: (res) => {
+        // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+        res.eventChannel.emit('acceptDataFromOpenerPage', {
+          keyword: that.data.value
+        })
+      },
+    })
+    
+    if (this.data.history.indexOf(this.data.value) == -1) {
+      let h = this.data.history
+      h.unshift(this.data.value)
+      if (h.length > 10) {
+        h = h.slice(0, 10)
+      }
+      this.setData({
+        history: h
+      })
+      wx.setStorage({
+        data: JSON.stringify(h),
+        key: 'search_history',
+      })
+    }
+  },
+
+  selectHistory (e) {
+    var i = e.currentTarget.dataset.index
+    var kw = this.data.history[i]
+    this.setData({
+      value: kw
+    })
+    this.search()
+  },
+
+  /**
+   * 鑾峰彇鏈湴缂撳瓨鎼滅储鍘嗗彶
+   */
+  getLocalHistory() {
+    var that = this
+    wx.getStorage({
+      key: 'search_history',
+      success: (res) => {
+        let h = JSON.parse(res.data)
+        that.setData({
+          history: h
+        })
+      },
+    })
+  },
+
+  /**
+   * 鑾峰彇鐑棬鎼滅储鍐呭
+   */
+  getHotTopic() {
+    var that = this
+    consultservice.getTopicLaw(app.globalData.accessToken.userId, {
+      success (res) {
+        that.setData({
+          hotTopic: res
+        })
+      }
+    })
+  },
+
+  gotoDetail (e) {
+    var i = e.currentTarget.dataset.index
+    var fileId = this.data.hotTopic[i].mfGuid
+    wx.navigateTo({
+      url: '/pages/mConsult/consultdetail/consultdetail',
+      success: (res) => {
+        // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+        res.eventChannel.emit('acceptDataFromOpenerPage', {
+          fileId: fileId
+        })
+      },
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/mConsult/consultsearch/consultsearch.json b/pages/mConsult/consultsearch/consultsearch.json
new file mode 100644
index 0000000..50786fd
--- /dev/null
+++ b/pages/mConsult/consultsearch/consultsearch.json
@@ -0,0 +1,8 @@
+{
+  "navigationBarTitleText": "鐜繚鐭ヨ瘑搴�",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "mp-icon": "/component/icon/icon"
+  }
+}
\ No newline at end of file
diff --git a/pages/mConsult/consultsearch/consultsearch.wxml b/pages/mConsult/consultsearch/consultsearch.wxml
new file mode 100644
index 0000000..5e2c2c8
--- /dev/null
+++ b/pages/mConsult/consultsearch/consultsearch.wxml
@@ -0,0 +1,28 @@
+<!--pages/mConsult/consultsearch/consultsearch.wxml-->
+<view class="page">
+  <view class="page__hd">
+    <view class="search-bar">
+      <mp-icon icon="search" size="15" color="black"></mp-icon>
+      <input type="text" class="search-bar__input" placeholder="{{placeholder}}" value="{{value}}" focus="{{focus}}" bindinput="inputChange" />
+      <text class="weui-icon-clear" hover-class="weui-active" wx:if="{{value.length > 0}}" bindtap="clearInput"></text>
+    </view>
+    <view class="btn" bindtap="search">{{value.length > 0 ? '鎼滅储' : '鍙栨秷'}}</view>
+  </view>
+  <view class="page__bd">
+    <view wx:if="{{history.length > 0}}">
+      <view>鍘嗗彶璁板綍</view>
+      <view class="history-record">
+        <text wx:for="{{history}}" wx:key="index" data-index="{{index}}" bindtap="selectHistory">{{item}}</text>
+      </view>
+    </view>
+
+    <view>澶у閮藉湪鎼�</view>
+    <view class="hot-topic">
+      <view wx:for="{{hotTopic}}" wx:key="index" class="hot-topic__item" data-index="{{index}}" bindtap="gotoDetail">
+        <view class="{{index < 3 ? 'hot-topic__hot' : 'hot-topic__normal'}}">{{index + 1}}</view>
+        <view class="hot-topic__name">{{item.mfName}}</view>
+      </view>
+    </view>
+  </view>
+  <view class="page__ft"></view>
+</view>
\ No newline at end of file
diff --git a/pages/mConsult/consultsearch/consultsearch.wxss b/pages/mConsult/consultsearch/consultsearch.wxss
new file mode 100644
index 0000000..9884df8
--- /dev/null
+++ b/pages/mConsult/consultsearch/consultsearch.wxss
@@ -0,0 +1,124 @@
+/* pages/mConsult/consultsearch/consultsearch.wxss */
+.page__hd {
+  /* background-color: white; */
+  padding: 10px;
+  display: flex;
+  align-items: center;
+}
+
+.page__bd {
+  padding-left: 10px;
+  padding-right: 10px;
+  font-size: 14px;
+}
+
+.search-bar {
+  flex: 1;
+  position: relative;
+  min-width: 50vw;
+  padding: 6px 8px;
+  font-size: 12px;
+  line-height: 24px;
+  color: var(--fyui-text-color_2);
+  text-align: left;
+  background-color: white;
+  border-radius: 20px;
+  border: 2px solid #57E4CB;
+  display: flex;
+  align-items: center;
+}
+
+.search-bar .weui-icon-clear {
+  /* position: absolute;
+  top: 50%;
+  right: 0;
+  margin-top: -16px; */
+  padding-left: 8px;
+  width: 16px;
+  height: 16px;
+  -webkit-mask-size: 16px;
+  mask-size: 16px;
+  /* display: block; */
+}
+
+.search-bar .search-bar__input {
+  width: 100%;
+  border: 0;
+  font-size: 14px;
+  line-height: 20px;
+  box-sizing: content-box;
+  background: transparent;
+  caret-color: var(--weui-BRAND);
+  color: var(--weui-FG-0);
+}
+
+.btn {
+  border-radius: 20px;
+  line-height: 20px;
+  font-size: 14px;
+  width: 70px;
+  background: linear-gradient(to top right, #42E4D5, #94DBF2);
+  padding: 4px 2px;
+  text-align: center;
+  color: white;
+  margin-left: 4px;
+}
+
+.history-record {
+  display: flex;
+  flex-wrap: wrap;
+  margin-bottom: 16px;
+}
+
+.history-record>text {
+  white-space: nowrap;
+  background-color: rgb(255, 255, 255);
+  margin-right: 8px;
+  margin-bottom: 4px;
+  padding: 2px 6px;
+  color: var(--fyui-text-color_2);
+  border-radius: 8px;
+  /* border: 1px solid var(--fyui-text-color_3); */
+}
+
+.hot-topic {
+  background-color: white;
+  position: relative;
+  overflow: hidden;
+  border-radius: 8px;
+  padding: 8px;
+}
+
+.hot-topic .hot-topic__item {
+  display: flex;
+  margin-bottom: 8px;
+}
+
+.hot-topic .hot-topic__hot{
+  background-color: rgba(255, 0, 0, 0.692);
+  width: 20px;
+  height: 20px;
+  text-align: center;
+  color: white;
+}
+
+.hot-topic .hot-topic__normal{
+  background-color: rgba(255, 166, 0, 0.692);
+  width: 20px;
+  height: 20px;
+  text-align: center;
+  color: white;
+}
+
+.hot-topic .hot-topic__name{
+  width: 100%;
+  margin-left: 8px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  /* background-color: orange; */
+}
+
+.hot-topic .hot-topic__name:active{
+  background-color: var(--fyui-BG-COLOR-ACTIVE);
+}
\ No newline at end of file
diff --git a/pages/mExtra/pSupervisionchange/pSupervisionchange.js b/pages/mExtra/pSupervisionchange/pSupervisionchange.js
new file mode 100644
index 0000000..109c7bc
--- /dev/null
+++ b/pages/mExtra/pSupervisionchange/pSupervisionchange.js
@@ -0,0 +1,156 @@
+// pages/mExtra/pSupervisionchange/pSupervisionchange.js
+import moment from '../../../utils/moment.min'
+import bLoadingStatus from '../../../base/behaviors/bLoadingStatus'
+import bLoadingToast from '../../../base/behaviors/bLoadingToast'
+const taskservice = require('../../../service/taskservice')
+
+Page({
+  behaviors: [bLoadingStatus, bLoadingToast],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    enable: false,
+    reason: '璇ラ摼鎺ュ凡瓒呮椂澶辨晥',
+
+    subTask: {},
+    problemList: [],
+
+    previewImageUrls:[],
+    previewCurrent: 0,
+    showPreview: false,
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    console.log(options);
+    if (options.time) {
+      let now = new Date()
+      now = now.getTime()
+      if (now - options.time <= (1000 * 60 * 10)) {
+        this.setData({
+          enable: true,
+        })
+        if (options.subTaskId) {
+          this.sId = options.subTaskId
+          this.getSubtask()
+          this.getProblems()
+        } else {
+          this.setData({
+            enable: false,
+            reason: '璇ュ贰鏌ヤ换鍔″凡澶辨晥',
+          })
+        }
+      }
+    }
+    // this.sId = 'TUIk7Jf3UKmaZM90'
+    // this.getSubtask()
+    // this.getProblems()
+  },
+
+  onShow() {
+    wx.hideHomeButton({
+      success: (res) => {},
+      fail: (res) => {},
+      complete: (res) => {},
+    })
+  },
+
+  getSubtask() {
+    var that = this
+    taskservice.getSubtask(this.sId, {
+      success(data) {
+        data.planstarttime = moment(data.planstarttime).format('YYYY骞碝M鏈圖D鏃�')
+        that.setData({
+          subTask: data
+        })
+      },
+      fail(err) {
+      },
+      complete() {
+      }
+    })
+  },
+
+  getProblems() {
+    var that = this
+    this.setData({loading: true})
+    taskservice.getProblem(this.sId, {
+      success(data) {
+        data.forEach(d => {
+          d.proPics = []
+          d.changePics = []
+          if (d.mediafileList) {
+            d.mediafileList.forEach(m => {
+              const pic = taskservice.imgUrl + m.extension1 + m.guid + '.jpg'
+              if (m.ischanged) {
+                d.changePics.push(pic)
+              } else {
+                d.proPics.push(pic)
+              }
+            }); 
+          }
+        });
+        that.setData({
+          problemList: data
+        })
+      },
+      fail(err) {
+        that.setData({
+          problemList: []
+        })
+      },
+      complete() {
+        that.setData({
+          loading: false
+        })
+      }
+    })
+  },
+
+  changeProblem(e) {
+    const index = e.currentTarget.dataset.index;
+    const pro = this.data.problemList[index]
+    wx.navigateTo({
+      url: '/pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail',
+      events: {
+        uploadOver: (data) => {
+          console.log(data);
+          setTimeout(() => {
+            this.getProblems()            
+          }, 1000);
+        }
+      },
+      success: (res) => {
+        res.eventChannel.emit('acceptDataFromOpenerPage', {
+          data: [pro],
+          index: index
+        })
+      },
+    })
+  },
+
+  //鍥剧墖鏀惧ぇ棰勮
+  previewImage(e) {
+    const {index, type} = e.currentTarget.dataset;
+    const previewImageUrls = []
+    const pro = this.data.problemList[index[0]]
+    if (type == 'pro') {
+      pro.proPics.forEach(p => {
+        previewImageUrls.push(p)
+      }); 
+    } else {
+      pro.changePics.forEach(p => {
+        previewImageUrls.push(p)
+      });
+    }
+    this.setData({
+      previewImageUrls,
+      previewCurrent: index[1],
+      showPreview: true,
+      title: pro.problemname
+    });
+  },
+})
\ No newline at end of file
diff --git a/pages/mExtra/pSupervisionchange/pSupervisionchange.json b/pages/mExtra/pSupervisionchange/pSupervisionchange.json
new file mode 100644
index 0000000..a026d8d
--- /dev/null
+++ b/pages/mExtra/pSupervisionchange/pSupervisionchange.json
@@ -0,0 +1,9 @@
+{
+  "navigationBarTitleText": "闂鏁存敼",
+  "navigationBarBackgroundColor": "#009e91",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "my-gallery": "/component/mygallery/mygallery",
+    "mp-icon": "/component/icon/icon"
+  }
+}
\ No newline at end of file
diff --git a/pages/mExtra/pSupervisionchange/pSupervisionchange.wxml b/pages/mExtra/pSupervisionchange/pSupervisionchange.wxml
new file mode 100644
index 0000000..06689c7
--- /dev/null
+++ b/pages/mExtra/pSupervisionchange/pSupervisionchange.wxml
@@ -0,0 +1,47 @@
+<!--pages/mExtra/pSupervisionchange/pSupervisionchange.wxml-->
+<import src="/template/nodata.wxml"></import>
+
+<view class="page">
+  <view class="banner-bg"></view>
+  <block wx:if="{{enable}}">
+    <view class="page__hd">
+      <view class="title">{{subTask.scensename}}</view>
+      <view class="title">宸℃煡鏃堕棿锛歿{subTask.planstarttime}}</view>
+    </view>
+    <view class="page__bd">
+      <block wx:if="{{problemList.length > 0}}">
+        <view wx:for="{{problemList}}" wx:key="index" class="card-subtask">
+          <view>
+            <text class="text-index">{{index + 1}}</text>
+            <text class="text-1">{{item.problemname}}</text>
+          </view>
+          <view>浣嶇疆锛歿{item.location}}</view>
+          <block wx:if="{{item.proPics.length > 0}}">
+            <view class="text-2">闂鍥剧墖</view>
+            <view class="img-group">
+              <view wx:for="{{item.proPics}}" wx:for-index="index2" wx:key="index2" wx:for-item="m">
+                <image class="img-group_img" src="{{m}}" mode="aspectFill" bindtap="previewImage" data-type="pro" data-index="{{[index, index2]}}"></image>
+              </view>
+            </view>
+          </block>
+          <block wx:if="{{item.changePics.length > 0}}">
+            <view class="text-2">鏁存敼鍥剧墖</view>
+            <view class="img-group">
+              <view wx:for="{{item.changePics}}" wx:for-index="index2" wx:key="index2" wx:for-item="m">
+                <image class="img-group_img" src="{{m}}" mode="aspectFill" bindtap="previewImage" data-type="change" data-index="{{[index, index2]}}"></image>
+              </view>
+            </view>
+          </block>
+          <button bindtap="changeProblem" disabled="{{item.ischanged}}" data-index="{{index}}">{{item.ischanged ? '宸叉暣鏀�' : '鏁存敼'}}</button>
+        </view>
+      </block>
+      <template wx:else is="nodataPage"></template>
+    </view>
+    <view class="page__ft"></view>
+  </block>
+  <view wx:else class="page__hd page__disable">
+    <mp-icon type="filled" icon="error" size="60" color="white"></mp-icon>
+    <view>{{reason}}</view>
+  </view>
+  <my-gallery hide-on-click="{{true}}" show-delete="{{false}}" show="{{showPreview}}" img-urls="{{previewImageUrls}}" current="{{previewCurrent}}" title="{{title}}"></my-gallery>
+</view>
\ No newline at end of file
diff --git a/pages/mExtra/pSupervisionchange/pSupervisionchange.wxss b/pages/mExtra/pSupervisionchange/pSupervisionchange.wxss
new file mode 100644
index 0000000..36f1bba
--- /dev/null
+++ b/pages/mExtra/pSupervisionchange/pSupervisionchange.wxss
@@ -0,0 +1,85 @@
+/* pages/mExtra/pSupervisionchange/pSupervisionchange.wxss */
+.page__hd {
+  padding: 0;
+}
+.banner-bg {
+  position: fixed;
+  width: 100%;
+  height: 100vh;
+  background: linear-gradient(#009e91, #00c4b3);
+}
+
+.title {
+  color: white;
+  margin-left: 4px;
+  margin-right: 4px;
+  font-size: 14px;
+  font-weight: 600;
+  margin-top: 8px;
+  margin-bottom: 4px;
+}
+
+.text-index {
+  display: inline-block;
+  background-color: var(--fyui-btn-color_1);
+  width: 20px;
+  height: 20px;
+  color: white;
+  text-align: center;
+  border-radius: 50%;
+  margin-right: 4px;
+  font-size: 14px;
+}
+
+.text-1 {
+  font-size: 16px;
+  font-weight: 600;
+}
+
+.text-2 {
+  color: var(--fyui-btn-color_1);
+}
+
+.img-group {
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.img-group>view {
+  width: 30vw;
+  text-align: center;
+}
+
+.img-group .img-group_img {
+  width: 29vw;
+  height: 29vw;
+}
+
+.card-subtask {
+  position: relative;
+  color: #009e91;
+  background-color: rgba(255, 255, 255, 0.918);
+  margin: 4px 4px;
+  border-radius: 4px;
+  padding: 4px;
+  font-size: 14px;
+}
+
+button {
+  white-space: nowrap;
+  background-color: var(--fyui-btn-color_1);
+  margin-right: 0px !important;
+  max-width: 60px;
+  font-size: 12px;
+  padding: 8px;
+  color: white;
+  position: relative;
+}
+
+.page__disable {
+  margin-top: 40%;
+  text-align: center;
+  color: white;
+  /* background-color: tomato; */
+  height: 100vh;
+}
\ No newline at end of file
diff --git a/pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.js b/pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.js
new file mode 100644
index 0000000..1cf3999
--- /dev/null
+++ b/pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.js
@@ -0,0 +1,98 @@
+// pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.js
+import bUpload from "../../../base/behaviors/bUpload"
+import bLoadingStatus from '../../../base/behaviors/bLoadingStatus'
+import bLoadingToast from '../../../base/behaviors/bLoadingToast'
+import taskservice from "../../../service/taskservice"
+
+Page({
+  behaviors: [bUpload, bLoadingStatus, bLoadingToast],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    problemList: [],
+    pIndex: 0,
+
+    previewImageUrls: [],
+    previewCurrent: 0,
+    showPreview: false,
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    var that = this
+    this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function (data) {
+      that.setData({
+        problemList: data.data,
+        index: data.index,
+      })
+    })
+  },
+
+  submitDialog(e) {
+    const index = e.currentTarget.dataset.index
+    if (this.data.imgFiles.length == 0) {
+      wx.showToast({
+        title: '璇疯嚦灏戦�夋嫨涓�寮犲浘鐗�',
+        icon: 'none',
+      })
+    } else {
+      this.setData({
+        showDialog: true,
+        pIndex: index
+      })
+    }
+  },
+
+  changeProblem() {
+    this.setData({
+      showDialog: false,
+    })
+    this.setData({loading: true})
+    const pId = this.data.problemList[this.data.pIndex].guid
+    let path = []
+    this.data.imgFiles.forEach(f => {
+      path.push(f.url)
+    });
+    taskservice.uploadChangePic(pId, path, {
+      success: (res)=> {
+        this.setData({loading: false})
+        this.getOpenerEventChannel().emit('uploadOver', {
+          index: this.data.index
+        })
+        wx.navigateBack({
+          delta: 1,
+        })
+      },
+      complete (res) {
+      }
+    })
+  },
+
+  //鍥剧墖鏀惧ぇ棰勮
+  previewImage(e) {
+    const {
+      index,
+      type
+    } = e.currentTarget.dataset;
+    const previewImageUrls = []
+    const pro = this.data.problemList[index[0]]
+    if (type == 'pro') {
+      pro.proPics.forEach(p => {
+        previewImageUrls.push(p)
+      });
+    } else {
+      pro.changePics.forEach(p => {
+        previewImageUrls.push(p)
+      });
+    }
+    this.setData({
+      previewImageUrls,
+      previewCurrent: index[1],
+      showPreview: true,
+      title: pro.problemname
+    });
+  },
+})
\ No newline at end of file
diff --git a/pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.json b/pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.json
new file mode 100644
index 0000000..d361849
--- /dev/null
+++ b/pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.json
@@ -0,0 +1,10 @@
+{
+  "navigationBarTitleText": "涓婁紶鏁存敼鍥剧墖",
+  "navigationBarBackgroundColor": "#009e91",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "mp-upload":"/component/uploader/uploader",
+    "c-dialog": "/component/commondialog/commondialog",
+    "my-gallery": "/component/mygallery/mygallery"
+  }
+}
\ No newline at end of file
diff --git a/pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.wxml b/pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.wxml
new file mode 100644
index 0000000..92f125f
--- /dev/null
+++ b/pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.wxml
@@ -0,0 +1,47 @@
+<!--pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.wxml-->
+<import src="/template/nodata.wxml"></import>
+
+<view class="page">
+  <view class="banner-bg"></view>
+  <view class="page__hd">
+  </view>
+  <view class="page__bd">
+    <block wx:if="{{problemList.length > 0}}">
+      <view wx:for="{{problemList}}" wx:key="index" class="card-subtask">
+        <view>
+          <text class="text-index">{{index + 1}}</text>
+          <text class="text-1">{{item.problemname}}</text>
+        </view>
+        <view>浣嶇疆锛歿{item.location}}</view>
+        <block wx:if="{{item.proPics.length > 0}}">
+          <view class="text-2">闂鍥剧墖</view>
+          <view class="img-group">
+            <view wx:for="{{item.proPics}}" wx:for-index="index2" wx:key="index2" wx:for-item="m">
+              <image class="img-group_img" src="{{m}}" mode="aspectFill" bindtap="previewImage" data-type="pro" data-index="{{[index, index2]}}"></image>
+            </view>
+          </view>
+        </block>
+        <block wx:if="{{item.changePics.length > 0}}">
+          <view class="text-2">鏁存敼鍥剧墖</view>
+          <view class="img-group">
+            <view wx:for="{{item.changePics}}" wx:for-index="index2" wx:key="index2" wx:for-item="m">
+              <image class="img-group_img" src="{{m}}" mode="aspectFill" bindtap="previewImage" data-type="change" data-index="{{[index, index2]}}"></image>
+            </view>
+          </view>
+        </block>
+        <block wx:else>
+          <mp-upload title="涓婁紶鍙拌处鍥剧墖" titleClass="upload-title-class" max-count="3" files="{{imgFiles}}" binduploadImg="uploadFile" binddelete="delImg"></mp-upload>
+        </block>
+        <button bindtap="submitDialog" disabled="{{item.ischanged}}" data-index="{{index}}">{{item.ischanged ? '宸叉暣鏀�' : '涓婁紶'}}</button>
+      </view>
+    </block>
+    <template wx:else is="nodataPage"></template>
+  </view>
+  <view class="page__ft">
+
+  </view>
+  <c-dialog show="{{showDialog}}" yes="纭" bindconfirm="changeProblem">
+    <view>纭鏄惁鎻愪氦鏁存敼锛�</view>
+  </c-dialog>
+  <my-gallery hide-on-click="{{true}}" show-delete="{{false}}" show="{{showPreview}}" img-urls="{{previewImageUrls}}" current="{{previewCurrent}}" title="{{title}}"></my-gallery>
+</view>
\ No newline at end of file
diff --git a/pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.wxss b/pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.wxss
new file mode 100644
index 0000000..8d0ade9
--- /dev/null
+++ b/pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.wxss
@@ -0,0 +1,78 @@
+/* pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail.wxss */
+.page__hd {
+  padding: 0;
+}
+.banner-bg {
+  position: fixed;
+  width: 100%;
+  height: 100vh;
+  background: linear-gradient(#009e91, #00c4b3);
+}
+
+.title {
+  color: white;
+  margin-left: 4px;
+  margin-right: 4px;
+  font-size: 14px;
+  font-weight: 600;
+  margin-top: 8px;
+  margin-bottom: 4px;
+}
+
+.text-index {
+  display: inline-block;
+  background-color: var(--fyui-btn-color_1);
+  width: 20px;
+  height: 20px;
+  color: white;
+  text-align: center;
+  border-radius: 50%;
+  margin-right: 4px;
+  font-size: 14px;
+}
+
+.text-1 {
+  font-size: 16px;
+  font-weight: 600;
+}
+
+.text-2 {
+  color: var(--fyui-btn-color_1);
+}
+
+.img-group {
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.img-group>view {
+  width: 30vw;
+  text-align: center;
+}
+
+.img-group .img-group_img {
+  width: 29vw;
+  height: 29vw;
+}
+
+.card-subtask {
+  position: relative;
+  color: #009e91;
+  background-color: rgba(255, 255, 255, 0.918);
+  margin: 4px 4px;
+  border-radius: 4px;
+  padding: 4px;
+  font-size: 14px;
+}
+
+button {
+  white-space: nowrap;
+  background-color: var(--fyui-btn-color_1);
+  margin-top: 4px;
+  margin-right: 0px !important;
+  max-width: 60px;
+  font-size: 12px;
+  padding: 8px;
+  color: white;
+  position: relative;
+}
\ No newline at end of file
diff --git a/pages/mExtra/pSupervisiontask/pSupervisiontask.js b/pages/mExtra/pSupervisiontask/pSupervisiontask.js
new file mode 100644
index 0000000..157851c
--- /dev/null
+++ b/pages/mExtra/pSupervisiontask/pSupervisiontask.js
@@ -0,0 +1,170 @@
+// pages/mExtra/pSupervisiontask/pSupervisiontask.js
+import bLoadingStatus from '../../../base/behaviors/bLoadingStatus'
+import bLoadingToast from '../../../base/behaviors/bLoadingToast'
+import {sceneTypes2} from '../../../data/sceneTypes'
+import moment from '../../../utils/moment.min'
+
+const taskservice = require('../../../service/taskservice')
+
+Page({
+  behaviors: [bLoadingStatus, bLoadingToast],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    //鍦烘櫙绫诲瀷
+    sceneTypes: [],
+    sIndex: 0,
+    //鎬讳换鍔�
+    taskList: [],
+    tIndex: 0,
+
+    //瀛愪换鍔�
+    subTaskList: [[], []],
+
+    //缁熻
+    changedSubTask: 0,
+    unChangedSubTask: 0,
+
+    tabIndex: 0,
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    this.setData({
+      sceneTypes: sceneTypes2
+    })
+    this.getTopTask()
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  onShow() {
+    this.refreshTopMargin()
+  },
+
+  onShareAppMessage(e) {
+    console.log(e);
+    if (e.from == 'button') {
+      const i = e.target.dataset.index
+      const subTask = this.data.subTaskList[this.data.tabIndex][i]
+      console.log(subTask);
+      let t = new Date()
+      t = t.getTime()
+      console.log(t);
+      return {
+        title: `[寰呮暣鏀筣${subTask.sceneName}`,
+        path: `/pages/mExtra/pSupervisionchange/pSupervisionchange?subTaskId=${subTask.stGuid}&time=${t}`,
+        imageUrl: '/res/icons/change_icon.jpg'
+      }
+    }
+  },
+
+  /**
+   * 鍔ㄦ�佸埛鏂板垪琛ㄩ《閮ㄥ杈硅窛
+   */
+  refreshTopMargin() {
+    let that = this;
+    let query = this.createSelectorQuery().in(this); //蹇呴』瑕佸厛鍒涘缓涓�涓煡璇�
+    query.select('.page__hd').boundingClientRect(function (rect) {
+      that.setData({
+        topMargin: rect.height + 'px'
+      });
+    }).exec();
+  },
+
+  /**
+   * 鑾峰彇鎬讳换鍔�
+   */
+  getTopTask() {
+    var that = this
+    this.setData({loading: true})
+    taskservice.getTopTask({
+      success(data) {
+        that.setData({
+          taskList: data
+        })
+      },
+      fail(err) {
+        that.setData({
+          taskList: []
+        })
+      },
+      complete() {
+        that.setData({
+          loading: false
+        })
+      }
+    })
+  },
+
+  /**
+   * 鑾峰彇鎬讳换鍔′笅鐨勫瓙浠诲姟缁熻
+   */
+  getSubTaskSummary() {
+    var that = this
+    this.setData({loading: true})
+    const {sceneTypes, sIndex, taskList, tIndex} = this.data
+    const topTaskId = taskList[tIndex].tguid
+    const sceneTypeId = sceneTypes[sIndex].value
+    taskservice.getSubTaskSummary(topTaskId, sceneTypeId, {
+      success(data) {
+        data.sort((a, b) => {
+          return moment(b.stPlanTime).diff(moment(a.stPlanTime))
+        })
+        const subTaskList = [[], []]
+        let changedSubTask = 0
+        let unChangedSubTask = 0
+        data.forEach(d => {
+          d.stPlanTime = moment(d.stPlanTime).format('YYYY骞碝M鏈圖D鏃�')
+          if (d.proNum > 0 && d.proNum > d.changeNum) {
+            subTaskList[0].push(d)
+            unChangedSubTask++
+          } else {
+            subTaskList[1].push(d)
+            changedSubTask++
+          }
+        });
+        that.setData({subTaskList, unChangedSubTask, changedSubTask})
+      },
+      fail(err) {
+        that.setData({
+          subTaskList: [[], []]
+        })
+      },
+      complete() {
+        that.setData({
+          loading: false
+        })
+      }
+    })
+  },
+
+  selectTab(e) {
+    let i = e.currentTarget.dataset.index
+    this.setData({
+      tabIndex: i,
+    })
+  },
+
+  bindTaskChange(e) {
+    let t = e.detail.value
+    this.setData({
+      tIndex: t,
+    })
+  },
+
+  bindSceneTypeChange(e) {
+    let s = e.detail.value
+    this.setData({
+      sIndex: s,
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/mExtra/pSupervisiontask/pSupervisiontask.json b/pages/mExtra/pSupervisiontask/pSupervisiontask.json
new file mode 100644
index 0000000..4ebd0df
--- /dev/null
+++ b/pages/mExtra/pSupervisiontask/pSupervisiontask.json
@@ -0,0 +1,8 @@
+{
+  "navigationBarTitleText": "鐩戠浠诲姟",
+  "navigationBarBackgroundColor": "#009e91",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "mp-icon": "/component/icon/icon"
+  }
+}
\ No newline at end of file
diff --git a/pages/mExtra/pSupervisiontask/pSupervisiontask.wxml b/pages/mExtra/pSupervisiontask/pSupervisiontask.wxml
new file mode 100644
index 0000000..83c962f
--- /dev/null
+++ b/pages/mExtra/pSupervisiontask/pSupervisiontask.wxml
@@ -0,0 +1,57 @@
+<!--pages/mExtra/pSupervisiontask/pSupervisiontask.wxml-->
+<import src="/template/nodata.wxml"></import>
+
+<view class="page">
+  <view class="banner-bg"></view>
+  <view class="page__hd">
+    <view class="title">浠诲姟閫夋嫨</view>
+    <view class="select-time">
+      <picker bindchange="bindTaskChange" value="{{tIndex}}" mode="selector" range="{{taskList}}" range-key="name">
+        <view class="select-time-text">
+          {{taskList[tIndex].name}}
+          <mp-icon extClass="icon-down" icon="arrow" size="10" color="white"></mp-icon>
+        </view>
+      </picker>
+      <picker bindchange="bindSceneTypeChange" value="{{sIndex}}" mode="selector" range="{{sceneTypes}}" range-key="name">
+        <view class="select-time-text">
+          {{sceneTypes[sIndex].name}}
+          <mp-icon extClass="icon-down" icon="arrow" size="10" color="white"></mp-icon>
+        </view>
+      </picker>
+      <view bindtap="getSubTaskSummary" class="search-btn">
+        <text>鏌ヨ</text>
+      </view>
+    </view>
+    <!-- 鏁版嵁琛� -->
+    <view class="title">浠诲姟璇︽儏</view>
+    <view class="tab-card">
+      <view bindtap="selectTab" data-index="0" class="{{tabIndex == 0 ? 'tab-card__selected' : ''}}">鏈暣鏀�({{unChangedSubTask}})</view>
+      <view bindtap="selectTab" data-index="1" class="{{tabIndex == 1 ? 'tab-card__selected' : ''}}">宸叉暣鏀�({{changedSubTask}})</view>
+    </view>
+  </view>
+  <view class="page__bd" style="margin-top: {{topMargin}};">
+    <block wx:if="{{subTaskList[tabIndex].length > 0}}">
+      <block wx:for="{{subTaskList[tabIndex]}}" wx:key="index">
+        <view class="title">{{(index == 0 || item.stPlanTime != subTaskList[tabIndex][index-1].stPlanTime) ? item.stPlanTime : ''}}</view>
+        <view class="card-subtask">
+          <!-- <image src="/res/icons/con_lib_bg.png" mode="aspectFit"></image> -->
+          <view style="z-index: 1;">
+            <view>{{item.sceneName}}</view>
+            <text>闂锛歿{item.proNum}}</text>
+            <text>鏁存敼锛歿{item.changeNum}}</text>
+          </view>
+          <view class="btn-share">
+            <button open-type="share" data-index="{{index}}">
+              <!-- <mp-icon type="filled" icon="share" size="30" color="#59D5B3"></mp-icon> -->
+              杞彂
+            </button>
+          </view>
+        </view>
+      </block>
+    </block>
+    <template wx:else is="nodataPage"></template>
+  </view>
+  <view class="page__ft">
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mExtra/pSupervisiontask/pSupervisiontask.wxss b/pages/mExtra/pSupervisiontask/pSupervisiontask.wxss
new file mode 100644
index 0000000..2e32ae4
--- /dev/null
+++ b/pages/mExtra/pSupervisiontask/pSupervisiontask.wxss
@@ -0,0 +1,131 @@
+/* pages/mExtra/pSupervisiontask/pSupervisiontask.wxss */
+.page__hd {
+  position: fixed;
+  width: 100%;
+  padding: 0;
+  z-index: 2;
+  background-color: #009e91;
+}
+
+.banner-bg {
+  position: fixed;
+  width: 100%;
+  height: 100vh;
+  background: linear-gradient(#009e91, #00c4b3);
+}
+
+.title {
+  color: white;
+  margin-left: 16px;
+  margin-right: 16px;
+  font-size: 14px;
+  font-weight: 600;
+  margin-top: 8px;
+  margin-bottom: 4px;
+}
+
+.select-time {
+  color: white;
+  margin: 0 16px 0 16px;
+  font-size: 0.8rem;
+  font-weight: 600;
+  display: flex;
+  justify-content: space-between;
+}
+
+.select-time .select-time-text {
+  border-radius: 4px;
+  border: 1px solid white;
+  text-align: center;
+  padding: 2px 8px;
+  margin-right: 4px;
+  max-width: 48vw;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.search-btn {
+  border-radius: 4px;
+  border: 1px solid white;
+  text-align: center;
+  padding: 2px 0;
+  color: #009e91;
+  flex: 1;
+  margin-left: 8px;
+  background-color: rgb(255, 255, 255);
+  white-space: nowrap;
+}
+
+.search-btn:active {
+  background-color: rgba(255, 255, 255, 0.534);
+}
+
+.more {
+  color: white;
+}
+
+.tab-card {
+  color: white;
+  margin: 4px 16px;
+  border: 1px solid white;
+  border-radius: 4px;
+  font-size: 14px;
+  display: flex;
+  justify-content: space-around;
+}
+.tab-card>view{
+  padding: 4px;
+  width: 100%;
+  text-align: center;
+}
+
+.tab-card>view:active {
+  background-color: rgba(255, 255, 255, 0.534);
+}
+
+.tab-card__selected {
+  background-color: white;
+  color: #009e91;
+}
+
+.card-subtask {
+  position: relative;
+  color: #009e91;
+  background-color: rgba(255, 255, 255, 0.918);
+  margin: 4px 16px;
+  border-radius: 4px;
+  padding: 4px 4px 4px 16px;
+  font-size: 14px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.card-subtask>text {
+  color: #00c4b3;
+  margin-right: 16px;
+  font-size: 12px;
+}
+
+.card-subtask>image{
+  width: 40px;
+  height: 40px;
+  position: absolute;
+  top: 0px;
+  left: 0px;
+  opacity: 1.0;
+}
+
+button {
+  white-space: nowrap;
+  background-color: #009e91;
+  max-width: 60px;
+  font-size: 12px;
+  padding: 8px;
+  color: white;
+}
+
+.btn-share {
+  
+}
\ No newline at end of file
diff --git a/pages/mLearn/baseC/cLearnItem/cLearnItem.js b/pages/mLearn/baseC/cLearnItem/cLearnItem.js
new file mode 100644
index 0000000..b036d41
--- /dev/null
+++ b/pages/mLearn/baseC/cLearnItem/cLearnItem.js
@@ -0,0 +1,40 @@
+// pages/mLearn/baseC/cLearnItem/cLearnItem.js
+import bOpenFile from '../../behaviors/bOpenFile'
+
+Component({
+  behaviors: [bOpenFile],
+  options: {
+    addGlobalClass: true,
+  },
+  /**
+   * 缁勪欢鐨勫睘鎬у垪琛�
+   */
+  properties: {
+    results: {
+      type: Array,
+      value: []
+    },
+    loading: {
+      type: Boolean,
+      value: false
+    },
+    needLoadMore: {
+      type: Boolean,
+      value: false
+    },
+  },
+
+  /**
+   * 缁勪欢鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 缁勪欢鐨勬柟娉曞垪琛�
+   */
+  methods: {
+    
+  }
+})
diff --git a/pages/mLearn/baseC/cLearnItem/cLearnItem.json b/pages/mLearn/baseC/cLearnItem/cLearnItem.json
new file mode 100644
index 0000000..4222c9e
--- /dev/null
+++ b/pages/mLearn/baseC/cLearnItem/cLearnItem.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/mLearn/baseC/cLearnItem/cLearnItem.wxml b/pages/mLearn/baseC/cLearnItem/cLearnItem.wxml
new file mode 100644
index 0000000..295f3b1
--- /dev/null
+++ b/pages/mLearn/baseC/cLearnItem/cLearnItem.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/mLearn/baseC/cLearnItem/cLearnItem.wxss b/pages/mLearn/baseC/cLearnItem/cLearnItem.wxss
new file mode 100644
index 0000000..00207c7
--- /dev/null
+++ b/pages/mLearn/baseC/cLearnItem/cLearnItem.wxss
@@ -0,0 +1,27 @@
+/* pages/mLearn/baseC/cLearnItem/cLearnItem.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/mLearn/behaviors/bFetch.js b/pages/mLearn/behaviors/bFetch.js
new file mode 100644
index 0000000..af0565a
--- /dev/null
+++ b/pages/mLearn/behaviors/bFetch.js
@@ -0,0 +1,60 @@
+const bLoadingStatus = require("../../../base/behaviors/bLoadingStatus")
+const lawservice = require("../../../service/lawservice")
+const moment = require('../../../utils/moment.min')
+const app = getApp()
+
+/**
+ * 鑾峰彇瀹堟硶鍩硅鏉愭枡
+ */
+module.exports = Behavior({
+  behaviors: [bLoadingStatus],
+  data: {
+    //鎼滅储缁撴灉
+    results: []
+  },
+  methods: {
+    loadmore(cPage) {
+      this.getResources({cPage: ++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/mLearn/behaviors/bOpenFile.js b/pages/mLearn/behaviors/bOpenFile.js
new file mode 100644
index 0000000..49c4757
--- /dev/null
+++ b/pages/mLearn/behaviors/bOpenFile.js
@@ -0,0 +1,63 @@
+/**
+ * 瀹堟硶瀛︿範鏉愭枡鐨勮幏鍙栧拰鎵撳紑
+ */
+module.exports = Behavior({
+  data: {
+  },
+  methods: {
+    /**
+     * 瀹堟硶瀛︿範鏉愭枡鍐呭璺宠浆
+     */
+    openFile(e) {
+      var index = e.currentTarget.dataset.index
+      let f = this.data.results[index]
+      var url = ""
+      switch (f.lrResourcefiletype) {
+        //鏂囨。
+        case 1:
+          let bodyUrl = f.lrBodyurl
+          wx.showLoading({
+            title: ' 鍔犺浇涓�',
+            mask: true,
+          })
+          wx.downloadFile({
+            url: bodyUrl,
+            success: function (res) {
+              wx.hideLoading()
+              const filePath = res.tempFilePath
+              wx.openDocument({
+                filePath: filePath,
+                success: function (res) {
+                  console.log('鎵撳紑鏂囨。鎴愬姛')
+                },
+                fail(error) {
+                  console.log(error);
+                }
+              })
+            }
+          })
+          break;
+          //閾炬帴
+        case 2:
+          url = ""
+          break;
+          //鍥剧墖
+        case 3:
+          url = ""
+          break;
+          //瑙嗛
+        case 4:
+          url = "/pages/mLearn/pLearnvideo/pLearnvideo"
+          break;
+      }
+      if (url != "") {
+        wx.navigateTo({
+          url: url,
+          success: (res) => {
+            res.eventChannel.emit('acceptDataFromOpenerPage', f)
+          },
+        })
+      }
+    },
+  }
+})
\ No newline at end of file
diff --git a/pages/mLearn/learfile/learnfile.js b/pages/mLearn/learfile/learnfile.js
new file mode 100644
index 0000000..210363b
--- /dev/null
+++ b/pages/mLearn/learfile/learnfile.js
@@ -0,0 +1,20 @@
+import ListPage from '../../../base/ListPage'
+import bFetch from '../behaviors/bFetch'
+
+ListPage({
+  behaviors: [bFetch],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    //瑙嗛绫诲瀷鐨勬枃浠�
+    fileType: 4
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    this.getResources({cPage: 1, fileType: this.data.fileType})
+  },
+})
\ No newline at end of file
diff --git a/pages/mLearn/learfile/learnfile.json b/pages/mLearn/learfile/learnfile.json
new file mode 100644
index 0000000..82e62af
--- /dev/null
+++ b/pages/mLearn/learfile/learnfile.json
@@ -0,0 +1,8 @@
+{
+  "navigationBarTitleText": "瀹堟硶瑙嗛",
+  "navigationBarBackgroundColor": "#65EAD2",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "c-learn-item": "../baseC/cLearnItem/cLearnItem"
+  }
+}
\ No newline at end of file
diff --git a/pages/mLearn/learfile/learnfile.wxml b/pages/mLearn/learfile/learnfile.wxml
new file mode 100644
index 0000000..6576cb4
--- /dev/null
+++ b/pages/mLearn/learfile/learnfile.wxml
@@ -0,0 +1,6 @@
+<view class="page ">
+  <view class="page__bd ">
+    <c-learn-item results="{{results}}" loading="{{loading}}" needLoadMore="{{needLoadMore}}"></c-learn-item>
+  </view>
+  <view class="page__ft"></view>
+</view>
\ No newline at end of file
diff --git a/pages/mLearn/learfile/learnfile.wxss b/pages/mLearn/learfile/learnfile.wxss
new file mode 100644
index 0000000..6a4f696
--- /dev/null
+++ b/pages/mLearn/learfile/learnfile.wxss
@@ -0,0 +1 @@
+/* pages/mLearn/learfile/learnfile.wxss */
\ No newline at end of file
diff --git a/pages/mLearn/learn/learn.js b/pages/mLearn/learn/learn.js
new file mode 100644
index 0000000..8a3d2f7
--- /dev/null
+++ b/pages/mLearn/learn/learn.js
@@ -0,0 +1,81 @@
+// pages/learn/learn.js
+import ListPage from '../../../base/ListPage'
+import bFetch from '../behaviors/bFetch'
+import bOpenFile from '../behaviors/bOpenFile'
+
+ListPage({
+  behaviors: [bFetch, bOpenFile],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    currentTab: 0,
+    tabList: [{
+        "name": "VOCs鎺掓斁"
+      },
+      {
+        "name": "鍙拌处"
+      },
+      {
+        "name": "娌荤悊璁炬柦璁惧"
+      },
+      {
+        "name": "鍦ㄧ嚎鐩戞祴璁惧"
+      }
+    ],
+    banners: [
+      {
+        pic: '',
+        url: '',
+        fileType: ''
+      },
+    ],
+    
+  },
+  
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad: function (options) {
+    this.getResources({})
+  },
+
+  loadComplete() {
+    this.getBanner()
+  },
+
+  getBanner() {
+    let banners = []
+    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,
+        fileType: d.lrResourcefiletype,
+      })
+    }
+    this.setData({
+      banners
+    })
+  },
+
+  goto: function (e) {
+    var url = ""
+    var index = e.currentTarget.dataset.index
+    switch (index) {
+      case '0':
+        url = '/pages/mLearn/learfile/learnfile'
+        break;
+      case '1':
+        url = "/pages/mLearn/learncase/learncase"
+        break;
+    }
+    if (url != "") {
+      wx.navigateTo({
+        url: url,
+      })
+    }
+  }
+})
\ No newline at end of file
diff --git a/pages/mLearn/learn/learn.json b/pages/mLearn/learn/learn.json
new file mode 100644
index 0000000..7ee0800
--- /dev/null
+++ b/pages/mLearn/learn/learn.json
@@ -0,0 +1,9 @@
+{
+  "navigationBarTitleText": "瀹堟硶瀛︿範",
+  "navigationBarBackgroundColor": "#65EAD2",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "mp-icon": "/component/icon/icon",
+    "c-learn-item": "../baseC/cLearnItem/cLearnItem"
+  }
+}
\ No newline at end of file
diff --git a/pages/mLearn/learn/learn.wxml b/pages/mLearn/learn/learn.wxml
new file mode 100644
index 0000000..b0d37e6
--- /dev/null
+++ b/pages/mLearn/learn/learn.wxml
@@ -0,0 +1,66 @@
+<!--pages/learn/learn.wxml-->
+<view class="page ">
+
+  <!-- <view class="swiper-tab">
+    <scroll-view scroll-left="{{navScrollLeft}}" scroll-x="true" show-scrollbar="false" scroll-with-animation="true">
+      <block wx:for="{{tabList}}" wx:key="i">
+        <view class="swiper-tab-list {{currentTab==index ? 'on' : ''}}" data-current="{{index}}" bindtap="swichNav">{{item.name}}</view>
+      </block>
+    </scroll-view>
+  </view> -->
+  <!-- <swiper current="{{currentTab}}" class="swiper-box" duration="300" bindchange="bindChange" style="height: {{pageheight}};">
+    <block wx:for="{{pageList}}" wx:for-item="page" wx:key="n">
+
+      <swiper-item>
+
+        <view class="page{{index}}">
+
+        </view>
+      </swiper-item>
+    </block>
+  </swiper> -->
+
+  <view class="page__bd ">
+    <view class="fyui-panel">
+      <swiper indicator-dots="true" autoplay="true" circular="true" interval="2000" duration="500" previous-margin="0px" next-margin="0px">
+        <block wx:for='{{banners}}' wx:key='u'>
+          <swiper-item>
+            <image src='{{item.pic}}' mode="aspectFill" class='swiper-item-images' data-index="{{index}}" bindtap="openFile" />
+          </swiper-item>
+        </block>
+      </swiper>
+    </view>
+
+    <view class="flex-h" style="padding: 8px 10px;">
+      <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>瀹堟硶鍩硅瑙嗛</view>
+          <mp-icon class="image-btn_goto" icon="arrow" color="#7F7F7F" size="8" type="filled"></mp-icon>
+        </view>
+
+      </view>
+      <view class="flex-v">
+        <view class="image-btn" style="background-color: #F4EED3;" bindtap="goto" data-index="1">
+          <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>
+            <mp-icon class="image-btn_goto" icon="arrow" color="#7F7F7F" size="8" type="filled"></mp-icon>
+          </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> -->
+
+    <c-learn-item results="{{results}}" loading="{{loading}}" needLoadMore="{{needLoadMore}}"></c-learn-item>
+
+  </view>
+
+  <view class="page__ft"></view>
+</view>
\ No newline at end of file
diff --git a/pages/mLearn/learn/learn.wxss b/pages/mLearn/learn/learn.wxss
new file mode 100644
index 0000000..8a525d9
--- /dev/null
+++ b/pages/mLearn/learn/learn.wxss
@@ -0,0 +1,101 @@
+/* pages/learn/learn.wxss */
+.swiper-tab{
+  position: fixed;
+  width: 100%;
+  text-align: center;
+  line-height: 80rpx;
+  white-space: nowrap;
+  z-index: 2;
+  background-color: #65EAD2;
+}
+
+.swiper-tab-list{
+  font-size: 30rpx;
+  display: inline-block;
+  min-width: 18%;
+  padding: 0 1%;
+  color: rgba(255, 255, 255, 0.658);
+}
+
+.on{ 
+  color: white;
+  font-weight: bold;
+  border-bottom: 4rpx solid white;
+}
+
+.swiper-box{
+  position: absolute;
+  display: block;
+  top: 80rpx;
+  width: 100%;
+  margin-top: 10px;
+  background-color: var(--fyui-BG_1);
+}
+
+.city-item{
+  width: 100%;
+  display: flex;
+  flex-flow: row nowrap;
+  margin-bottom: 10px;
+}
+
+.img{
+  width: 40%;
+  height: 100px;
+}
+
+.text{
+  width: 60%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  font-size: 24px;
+  border: 1px solid #ddd;
+  box-sizing: border-box;
+}
+
+.swiper-item-images{
+  width: 100%;
+  height: 300rpx;
+}
+
+.image-btn{
+  position: relative;
+  width: 46vw;
+  height: 20vw;
+  background-color: #ECEEF9;
+}
+
+.image-btn_title{
+  position: relative;
+  white-space: nowrap;
+  z-index: 1;
+  color: var(--fyui-text-color_2);
+  font-size: 12px;
+  margin: 10px;
+}
+
+.image-btn_title_t{
+  color: var(--fyui-text-color_1);
+  font-weight: 600;
+  font-size: 16px;
+}
+
+.image-btn__2 {
+  position: absolute;
+  width: 30vw;
+  height: 20vw;
+  /* background-color: red; */
+  right: 0;
+  bottom: 0;
+  z-index: 0;
+}
+
+.image-btn_goto{
+  display: block;
+  background-color: white;
+  width: 20px;
+  height: 20px;
+  text-align: center;
+  border-radius: 50%;
+}
\ No newline at end of file
diff --git a/pages/mLearn/learncase/learncase.js b/pages/mLearn/learncase/learncase.js
new file mode 100644
index 0000000..00640e2
--- /dev/null
+++ b/pages/mLearn/learncase/learncase.js
@@ -0,0 +1,29 @@
+// pages/mLearn/learncase/learncase.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    //鎸夌収鐑棬鎺ㄨ崘鏈哄埗鑾峰彇鎵ф硶妗堜緥
+    keyobj: {keyword: '', type: 3},
+    //涓婃粦瑙﹀簳鍔犺浇
+    reachBottom: false
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+    this.setData({
+      reachBottom: true
+    })
+  },
+})
\ No newline at end of file
diff --git a/pages/mLearn/learncase/learncase.json b/pages/mLearn/learncase/learncase.json
new file mode 100644
index 0000000..a48fcf5
--- /dev/null
+++ b/pages/mLearn/learncase/learncase.json
@@ -0,0 +1,8 @@
+{
+  "navigationBarTitleText": "鎵ф硶妗堜緥",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "c-result-item-search": "../../mConsult/cResultItemSearch/cResultItemSearch"
+  }
+}
\ No newline at end of file
diff --git a/pages/mLearn/learncase/learncase.wxml b/pages/mLearn/learncase/learncase.wxml
new file mode 100644
index 0000000..389116b
--- /dev/null
+++ b/pages/mLearn/learncase/learncase.wxml
@@ -0,0 +1,8 @@
+<!--pages/mLearn/learncase/learncase.wxml-->
+<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/mLearn/learncase/learncase.wxss b/pages/mLearn/learncase/learncase.wxss
new file mode 100644
index 0000000..cc91aaf
--- /dev/null
+++ b/pages/mLearn/learncase/learncase.wxss
@@ -0,0 +1 @@
+/* pages/mLearn/learncase/learncase.wxss */
\ No newline at end of file
diff --git a/pages/mLearn/pLearnvideo/pLearnvideo.js b/pages/mLearn/pLearnvideo/pLearnvideo.js
new file mode 100644
index 0000000..64eb9d4
--- /dev/null
+++ b/pages/mLearn/pLearnvideo/pLearnvideo.js
@@ -0,0 +1,85 @@
+// pages/module_common/pagevideo/pagevideo.js
+import ListPage from '../../../base/ListPage'
+import bFetch from '../behaviors/bFetch'
+
+const lawservice = require("../../../service/lawservice")
+const moment = require('../../../utils/moment.min')
+const app = getApp()
+
+ListPage({
+  behaviors: [bFetch],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    video: {},
+    series: [],
+
+    thisVideo: 1,
+    showDialog: false,
+    groups: [
+      'actionSlot1',
+    ]
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    var that = this
+    this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function (data) {
+      setTimeout(() => {
+        that.setData({
+          video: data
+        })  
+      }, 500);
+      
+      // 椤甸潰鏍囬
+      if (data.lrResourcetitle) {
+        wx.setNavigationBarTitle({
+          title: data.lrResourcetitle,
+        })
+      }
+
+      // 瑙嗛鎵�鍦ㄥ悎闆�
+      if (data.lrExtension2 && data.lrExtension2 != '') {
+        if (data.lrExtension3) {
+          that.setData({
+            thisVideo: parseInt(data.lrExtension3)
+          }) 
+        }
+        that.getSerise(data.lrExtension2)
+      }
+    })
+
+    this.getResources({fileType: 4})
+  },
+
+  getSerise(seriesId) {
+    var that = this
+    lawservice.getSerise(app.globalData.userInfo.guid, seriesId, {
+      success(data) {
+        that.setData({
+          series: data
+        })
+      },
+    })
+  },
+
+  showSeries() {
+    this.setData({
+      showDialog: true
+    })
+  },
+
+  selectVideo(e) {
+    let thisVideo = e.currentTarget.dataset.index
+    const video = this.data.series[thisVideo]
+    thisVideo++
+    this.setData({
+      video,
+      thisVideo,
+      showDialog: false
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/mLearn/pLearnvideo/pLearnvideo.json b/pages/mLearn/pLearnvideo/pLearnvideo.json
new file mode 100644
index 0000000..adcf95a
--- /dev/null
+++ b/pages/mLearn/pLearnvideo/pLearnvideo.json
@@ -0,0 +1,10 @@
+{
+  "navigationBarTitleText": "瑙嗛鎾斁",
+  "navigationBarBackgroundColor": "#65EAD2",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "mp-icon": "/component/icon/icon",
+    "c-learn-item": "../baseC/cLearnItem/cLearnItem",
+    "mp-actionSheet": "/component/actionsheet/actionsheet"
+  }
+}
\ No newline at end of file
diff --git a/pages/mLearn/pLearnvideo/pLearnvideo.wxml b/pages/mLearn/pLearnvideo/pLearnvideo.wxml
new file mode 100644
index 0000000..8c37969
--- /dev/null
+++ b/pages/mLearn/pLearnvideo/pLearnvideo.wxml
@@ -0,0 +1,65 @@
+<!--pages/module_common/pagevideo/pagevideo.wxml-->
+<view class="page">
+  <view class="page__hd">
+    <video class="video" id="myVideo" src="{{video.lrBodyurl}}" binderror="videoErrorCallback" show-center-play-btn='{{false}}' show-play-btn="{{true}}" controls autoplay custom-cache="{{false}}" poster="{{video.lrPicurl}}" picture-in-picture-mode="{{['push', 'pop']}}" bindenterpictureinpicture='bindVideoEnterPictureInPicture' bindleavepictureinpicture='bindVideoLeavePictureInPicture'></video>
+  </view>
+  <view class="page__bd">
+    <view class="fyui-box  fyui-box__text">
+      <view class="fyui-box__hd">
+        {{video.lrResourcetitle}}
+      </view>
+      <view class="fyui-box__bd">
+        <view class="fyui-box__content">{{video.lrResourcedesc}}</view>
+
+      </view>
+      <view class="fyui-box__ft">
+        <view>{{video.lrPublishdate}}</view>
+        <view class="flex-h">
+          <image src="/res/icons/view.png" class="icon" style="margin-right: 4px;"></image>{{video.views}}
+        </view>
+      </view>
+    </view>
+
+    <view>
+      <view wx:if="{{series.length > 0}}" class="fyui-box  fyui-box__text">
+        <view class="video-series" bindtap="showSeries">
+          <view>瑙嗛鍚堥泦({{thisVideo}}/{{series.length}})</view>
+          <mp-icon icon="arrow" class="icon-down" size="14" color="#7F7F7F"></mp-icon>
+        </view>
+      </view>
+    </view>
+  </view>
+  <view class="page__ft">
+    <view class="title">鐩稿叧瑙嗛</view>
+    <!-- <c-learn-item results="{{results}}" loading="{{loading}}" needLoadMore="{{needLoadMore}}"></c-learn-item> -->
+
+    <view wx:for="{{results}}" wx:key="index" wx:item="item">
+      <view class="fyui-box" bindtap="gotoResource" data-index="{{index}}">
+        <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" style="margin-right: 4px;"></image>{{item.views}}
+            </view>
+          </view>
+        </view>
+      </view>
+    </view>
+  </view>
+
+  <mp-actionSheet show="{{showDialog}}" actions="{{groups}}" showCancel="{{false}}">
+    <view slot="actionSlot1" class="custom-action">
+      <view class="custom-action__series">
+        <view wx:for="{{series}}" wx:key="index" data-index="{{index}}" bindtap="selectVideo">
+          <view class="custom-action__video {{thisVideo == index + 1 ? 'selected' : ''}}">
+            {{index+1}}. {{item.lrResourcetitle}}
+          </view>
+        </view>
+      </view>
+    </view>
+  </mp-actionSheet>
+</view>
\ No newline at end of file
diff --git a/pages/mLearn/pLearnvideo/pLearnvideo.wxss b/pages/mLearn/pLearnvideo/pLearnvideo.wxss
new file mode 100644
index 0000000..598f2cb
--- /dev/null
+++ b/pages/mLearn/pLearnvideo/pLearnvideo.wxss
@@ -0,0 +1,73 @@
+/* pages/module_common/pagevideo/pagevideo.wxss */
+.page__hd{
+  padding: 0;
+}
+
+.page__ft{
+  text-align: left;
+}
+
+.video{
+  width: 100%;
+}
+
+.video-series {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  border: 1px solid var(--fyui-BG_1);
+  border-radius: 4px;
+  padding: 2px 16px;
+  font-size: 14px;
+  color: var(--fyui-text-color_2);
+}
+
+.title{
+  text-align: start;
+  padding: 0 16px;
+  font-weight: 600;
+  font-size: 16px;
+}
+
+.fyui-box__content {
+  text-align: start;
+}
+
+.custom-action {
+  position: relative;
+  min-height: 40vh;
+}
+
+.custom-action__series {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+  align-items: center;
+  /* background-color: blueviolet; */
+}
+
+.custom-action__series>view {
+  width: 50%;
+  /* background-color: rosybrown; */
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  padding: 4px 0;
+}
+
+.custom-action__video {
+  width: 86%;
+  color: var(--fyui-text-color_2);
+  border: 1px solid var(--fyui-text-color_2);
+  border-radius: 4px;
+  padding: 2px 4px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.selected{
+  color: white;
+  border: 1px solid var(--fyui-primary-color);
+  background-color: var(--fyui-primary-color);
+}
\ No newline at end of file
diff --git a/pages/mLedger/behaviors/bUploadLedger.js b/pages/mLedger/behaviors/bUploadLedger.js
new file mode 100644
index 0000000..21f2c97
--- /dev/null
+++ b/pages/mLedger/behaviors/bUploadLedger.js
@@ -0,0 +1,75 @@
+import bUpload from "../../../base/behaviors/bUpload"
+import ledgerservice from"../../../service/ledgerservice"
+import bLoadingStatus from '../../../base/behaviors/bLoadingStatus'
+import moment from '../../../utils/moment.min'
+
+const app = getApp()
+
+/**
+ * 鍙拌处涓婁紶绠$悊
+ */
+module.exports = Behavior({
+  behaviors: [bUpload, bLoadingStatus],
+  data: {
+    ledger: {},
+    remark: '',
+  },
+  methods: {
+    _uploadLedger() {
+      if (this.data.imgFiles.length == 0) return
+      
+      var that = this
+      let path = []
+      this.data.imgFiles.forEach(f => {
+        path.push(f.url)
+      });
+      let ledger = this.data.ledger
+      ledger.remark1 = this.data.remark
+
+      this.setData({loading: true})
+      ledgerservice.uploadLedger(app.globalData.accessToken.userId, ledger, path, {
+        success (res) {
+          that.setData({loading: false})
+          if (typeof that._success === 'function') {
+            that._success(res)
+          }
+        },
+        fail(err) {
+          that.setData({loading: false})
+          // wx.showToast({
+          //   title: '涓婁紶澶辫触',
+          //   duration: 1000,
+          //   icon: 'none',
+          //   mask: true,
+          // })
+        },
+        complete (res) {
+        }
+      })
+    },
+
+    _uploadNoLedger() {
+      var that = this
+      const time = moment().format('YYYY-MM-DD')
+      const idList = [this.data.ledger.ledgerSubTypeId]
+      this.setData({loading: true})
+      ledgerservice.uploadNoLedger(app.globalData.accessToken.userId, time, idList, {
+        success (res) {
+          that.setData({loading: false})
+          if (typeof that._success === 'function') {
+            that._success(res)
+          }
+        },
+        fail(err) {
+          that.setData({loading: false})
+          // wx.showToast({
+          //   title: '涓婁紶澶辫触',
+          //   duration: 1000,
+          //   icon: 'none',
+          //   mask: true,
+          // })
+        },
+      })
+    }
+  }
+})
\ No newline at end of file
diff --git a/pages/mLedger/ledgerhistory/ledgerhistory.js b/pages/mLedger/ledgerhistory/ledgerhistory.js
new file mode 100644
index 0000000..e667107
--- /dev/null
+++ b/pages/mLedger/ledgerhistory/ledgerhistory.js
@@ -0,0 +1,224 @@
+// pages/mLedger/ledgerHistory/ledgerhistory.js
+const ledgerservice = require("../../../service/ledgerservice")
+const moment = require('../../../utils/moment.min')
+const app = getApp()
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    year: 2000,
+    maxYear: 2000,
+
+    months: [{
+      month: 1,
+      hasData: true
+    }, {
+      month: 2,
+      hasData: true
+    }, {
+      month: 3,
+      hasData: true
+    }, {
+      month: 4,
+      hasData: true
+    }, {
+      month: 5,
+      hasData: true
+    }, {
+      month: 6,
+      hasData: true
+    }, {
+      month: 7,
+      hasData: true
+    }, {
+      month: 8,
+      hasData: true
+    }, {
+      month: 9,
+      hasData: true
+    }, {
+      month: 10,
+      hasData: true
+    }, {
+      month: 11,
+      hasData: true
+    }, {
+      month: 12,
+      hasData: true
+    }],
+    selectedMonIndex: 0,
+
+    recordList: [],
+
+    previewImageUrls:[],
+    previewCurrent: 0,
+    showPreview: false,
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    var that = this
+    this.initTime()
+    this.getRecord()
+    this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function (data) {
+      let ledgerMap = new Map()
+      data.tabList.forEach(t => {
+        ledgerMap.set(t.name, {
+          notUpload: t.tag,
+          total: t.total,
+          ledgers: []
+        })
+      });
+      that.setData({
+        ledgerMap
+      })
+    })
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  onShow(){
+    if (this.data.marginTop == undefined) {
+      this.topHeight('.page__hd')
+    }
+  },
+
+  initTime(year) {
+    var date = new Date()
+    let maxYear = date.getFullYear()
+    var thisMonth = date.getMonth()
+    if (year == undefined) {
+      year = maxYear + '骞�'
+    }
+    this.setData({
+      year: year,
+      maxYear: maxYear,
+    })
+    this.setData({
+      selectedMonIndex: thisMonth
+    })
+  },
+
+  bindYearChange(e) {
+    let y = e.detail.value
+    this.setData({
+      year: `${y}骞碻
+    })
+    this.getRecord()
+  },
+
+  selectMonth(e) {
+    let index = e.currentTarget.dataset.index
+    this.setData({
+      selectedMonIndex: index
+    })
+    this.getRecord()
+  },
+
+  getRecord() {
+    var that = this
+    var userId = app.globalData.accessToken.userId
+    var sceneType = app.globalData.userInfo.extension2
+    let month = this.data.months[this.data.selectedMonIndex].month
+    let year = parseInt(this.data.year.split("骞�")[0])
+    var time = moment().year(year).month(month - 1).format('YYYY-MM-DD')
+    wx.showLoading({
+      title: '鍔犺浇涓�',
+      mask: true,
+      success: (res) => {},
+      fail: (res) => {},
+      complete: (res) => {},
+    })
+    setTimeout(() => {
+      wx.hideLoading()
+    }, 20000);
+    ledgerservice.getLedgerDetail(userId, undefined, sceneType, time, {
+      success(res) {
+        let ledgerMap = that.data.ledgerMap
+        ledgerMap.forEach((e, key) => {
+          e.ledgers = []
+        });
+        res.forEach(r => {
+          let t = ledgerMap.get(r.ledgerType)
+          t.ledgers.push(r)
+        });
+        let recordList = []
+        ledgerMap.forEach((e, key) => {
+          recordList.push({
+            ledgerType: key,
+            total: e.total,
+            notUpload: e.notUpload,
+            ledgers: e.ledgers
+          })
+        });
+        // for (const key in ledgerMap) {
+        //   const e = ledgerMap.get(key);
+
+        // }
+        that.setData({
+          ledgerMap: ledgerMap,
+          recordList: recordList
+        })
+        console.log(recordList);
+      },
+      complete(res) {
+        wx.hideLoading()
+      }
+    })
+  },
+
+  topHeight(element) {
+    let that = this;
+    let query = wx.createSelectorQuery(); //蹇呴』瑕佸厛鍒涘缓涓�涓煡璇�
+    query.select(element).boundingClientRect(function (rect) {
+      that.setData({
+        marginTop: rect.height + 'px'
+      });
+    }).exec();
+  },
+
+  gotoLedgerDetail(e) {
+    var i = e.currentTarget.dataset.index.split(',')
+    var indexGroup = [parseInt(i[0]), parseInt(i[1])]
+    var ledger = this.data.recordList[indexGroup[0]].ledgers[indexGroup[1]]
+    console.log(ledger);
+    wx.navigateTo({
+      url: '/pages/mLedger/ledgerupload/ledgerupload',
+      success: (res) => {
+        // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+        res.eventChannel.emit('acceptDataFromOpenerPage', {
+          ledger: ledger,
+          indexGroup: indexGroup,
+          barTitle: '鍘嗗彶鍙拌处'
+        })
+      },
+    })
+  },
+  
+  previewImage(e) {
+    var i = e.currentTarget.dataset.index.split(',')
+    var indexGroup = [parseInt(i[0]), parseInt(i[1])]
+    var ledger = this.data.recordList[indexGroup[0]].ledgers[indexGroup[1]]
+
+    const ledgerTitle = ledger.ledgerName
+    const ledgerRemark = ledger.remark1
+    const previewImageUrls = ledger.path1;
+    this.setData({
+      previewImageUrls,
+      ledgerRemark,
+      ledgerTitle,
+      previewCurrent: 0,
+      showPreview: true
+    });
+  },
+})
\ No newline at end of file
diff --git a/pages/mLedger/ledgerhistory/ledgerhistory.json b/pages/mLedger/ledgerhistory/ledgerhistory.json
new file mode 100644
index 0000000..2f2cabf
--- /dev/null
+++ b/pages/mLedger/ledgerhistory/ledgerhistory.json
@@ -0,0 +1,8 @@
+{
+  "navigationBarTitleText": "鍘嗗彶鍙拌处",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "usingComponents": {
+    "mp-icon": "/component/icon/icon",
+    "my-gallery": "/component/mygallery/mygallery"
+  }
+}
\ No newline at end of file
diff --git a/pages/mLedger/ledgerhistory/ledgerhistory.wxml b/pages/mLedger/ledgerhistory/ledgerhistory.wxml
new file mode 100644
index 0000000..2fa26ca
--- /dev/null
+++ b/pages/mLedger/ledgerhistory/ledgerhistory.wxml
@@ -0,0 +1,36 @@
+<!--pages/mLedger/ledgerHistory/ledgerhistory.wxml-->
+<import src="/template/nodata.wxml"></import>
+<view class="page">
+  <view class="page__hd">
+    <view class="flex-h">
+      <text class="title">鏌ョ湅璁板綍</text>
+      <picker bindchange="bindYearChange" data-type="year" value="{{year}}" mode="date" fields="year" end="{{maxYear}}">
+        <view class="fyui-selector">
+          {{year}}
+          <mp-icon extClass="arrow-down" icon="arrow" color="black" size="{{12}}"></mp-icon>
+        </view>
+      </picker>
+    </view>
+    <view class="horizal-list">
+      <view class="{{selectedMonIndex == index ? 'tag_selected':'tag_unselected'}} {{item.hasData ? 'tag_has_data':''}}" wx:for="{{months}}" wx:key="month" bindtap="selectMonth" data-index="{{index}}">{{item.month}}鏈�</view>
+    </view>
+  </view>
+  <view class="page__bd" style="margin-top: {{marginTop}};">
+    <block wx:if="{{recordList.length > 0}}">
+      <view wx:for="{{recordList}}" wx:key="index" wx:for-index="i1" class="fyui-panel">
+        <view class="flex-h">
+          <view class="ledger-type">{{item.ledgerType}}</view>
+          <view class="ledger-type_2">({{item.ledgers.length}} / {{item.total}})</view>
+        </view>
+        <view class="ledger-group">
+          <view wx:for="{{item.ledgers}}" wx:for-item="ledger" wx:for-index="i2" wx:key="i2" class="ledger-group_item" bindtap="previewImage" data-index="{{i1}},{{i2}}">
+            <image class="" src="{{ledger.path1[0]}}" mode="aspectFill"></image>
+            <view>{{ledger.ledgerName}}</view>
+          </view>
+        </view>
+      </view>
+    </block>
+    <template wx:else is="nodataPage"></template>
+  </view>
+</view>
+<my-gallery hide-on-click="{{true}}" show-delete="{{false}}" show="{{showPreview}}" img-urls="{{previewImageUrls}}" current="{{previewCurrent}}" title="{{ledgerTitle}}" remark="{{ledgerRemark}}"></my-gallery>
\ No newline at end of file
diff --git a/pages/mLedger/ledgerhistory/ledgerhistory.wxss b/pages/mLedger/ledgerhistory/ledgerhistory.wxss
new file mode 100644
index 0000000..e0ddfea
--- /dev/null
+++ b/pages/mLedger/ledgerhistory/ledgerhistory.wxss
@@ -0,0 +1,85 @@
+/* pages/mLedger/ledgerHistory/ledgerhistory.wxss */
+.page__hd {
+  background-color: var(--fyui-BG_1);
+  position: fixed;
+  z-index: 2;
+}
+.flex-h{
+  padding: 8px;
+}
+
+.title{
+  font-size: 14px;
+  font-weight: 550;
+  margin: 4px 0;
+}
+
+.arrow-down {
+  transform: rotateZ(90deg);
+  margin-left: 6px;
+}
+
+.tag_unselected,
+.tag_selected {
+  font-size: 12px;
+  background-color: #b4b4b45b;
+  /* border: 1px solid rgb(175, 173, 173); */
+  border-radius: 2px;
+  color: var(--fyui-text-color_3);
+  padding: 6rpx 18rpx;
+  margin-bottom: 8px;
+  width: 10%;
+  text-align: center;
+}
+
+.tag_has_data {
+  color: var(--fyui-text-color_1);
+  background-color: white;
+}
+
+.tag_selected {
+  background-color: var(--fyui-primary-color);
+  color: white;
+}
+
+.horizal-list {
+  display: flex;
+  flex-flow: row;
+  flex-wrap: wrap;
+  white-space: nowrap;
+  justify-content: space-around;
+}
+
+.ledger-type{
+  font-size: 14px;
+  font-weight: 600;
+  padding: 0 8px;
+}
+
+.ledger-type_2{
+  font-size: 14px;
+  padding: 0 8px;
+  color: var(--fyui-text-color_3);
+}
+
+.ledger-group{
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.ledger-group_item{
+  width: 46vw;
+  text-align: center;
+  font-size: 14px;
+}
+
+.ledger-group_item>image{
+  width: 40vw;
+  height: 40vw;
+  border-radius: 8px;
+}
+
+.ledger-group_item>view{
+  font-size: 12px;
+  margin-bottom: 8px;
+}
\ No newline at end of file
diff --git a/pages/mLedger/ledgerhome/ledgerhome.js b/pages/mLedger/ledgerhome/ledgerhome.js
new file mode 100644
index 0000000..2348115
--- /dev/null
+++ b/pages/mLedger/ledgerhome/ledgerhome.js
@@ -0,0 +1,298 @@
+// pages/mLedger/ledgerhome/ledgerhome.js
+const ledgerservice = require("../../../service/ledgerservice")
+const moment = require('../../../utils/moment.min')
+const app = getApp()
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    thisMonth: '',
+    lastMonth: '',
+
+    //鎻愪氦鏈熼檺
+    deadline: '',
+    //鍓╀綑鎻愪氦澶╂暟
+    leftday: 0,
+
+    //鏈湀姹囨��
+    thisMonthInfo: {
+      //蹇呭~椤规�绘暟
+      totalMust: 0,
+      //蹇呭~椤规彁浜ゆ暟
+      finishedMust: 0,
+      //閫夊~椤规�绘暟
+      totalSelect: 0,
+      //閫夊~椤规彁浜ゆ暟
+      finishedSelect: 0,
+      //鎻愪氦鎯呭喌
+      status: '',
+      //瓒呮椂鎯呭喌
+      overtime: '',
+      //寤鸿
+      suggestion: ''
+    },
+    //涓婃湀姹囨��
+    lastMonthInfo: {
+      totalMust: 0,
+      finishedMust: 0,
+      totalSelect: 0,
+      finishedSelect: 0,
+      status: '',
+      overtime: '',
+      suggestion: ''
+    },
+
+    //閫夐」鍗$浉鍏�
+    currentTab: 0,
+    tabList: [],
+    pageList: [],
+    pageheight: '300px',
+
+    //褰撳墠鏄剧ず鏈堜唤
+    showThisMonth: true,
+  },
+
+  //姣忔湀鍙拌处鎻愪氦鏈熼檺鏃�
+  DEADLINEDAY: 10,
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    let now = moment()
+    let limitTime = moment().date(this.DEADLINEDAY)
+    //濡傛灉鏄柊娉ㄥ唽鐢ㄦ埛涓嶅埌涓�涓湀锛屽垯涓嶆彁閱掓湰鏈堟儏鍐碉紝鐩存帴鎻愰啋涓嬩釜鏈堢殑鎯呭喌
+    if (app.globalData.newUser) {
+      limitTime.add(1, 'M')
+    }
+    let deadline = limitTime.format(`MM-${this.DEADLINEDAY}`)
+    let leftday = limitTime.diff(now, 'days')
+    let thisMonth = now.format('YYYY-MM')
+    let lastMonth = now.add(-1, 'M').format('YYYY-MM')
+    this.setData({
+      deadline,
+      leftday,
+      thisMonth,
+      lastMonth
+    })
+
+    now = moment()
+    this.getLedgerType(now.format('YYYY-MM-DD'), r => {
+      this.setData({
+        tabList: r[0],
+        pageList: r[1],
+        thisMonthInfo: r[2]
+      })
+      this.tabsHeight('.page0')
+    }) //鏈湀
+    this.getLedgerType(now.add(-1, 'M').format('YYYY-MM-DD'), r => {
+      this.setData({
+        lastMonthInfo: r[2]
+      })
+    }, true) //涓婃湀
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  getLedgerType(time, success, lastMonth) {
+    var that = this
+    // var time = moment().format('YYYY-MM-DD')
+    ledgerservice.getLedgerSummary(app.globalData.accessToken.userId, app.globalData.userInfo.extension2, time, {
+      success(res) {
+        let r = that.parseLedgerType(res, lastMonth)
+        success(r)
+      }
+    })
+  },
+
+  parseLedgerType(subtypes, lastMonth) {
+    let monthInfo = {
+      totalMust: 0,
+      finishedMust: 0,
+      totalSelect: 0,
+      finishedSelect: 0,
+      status: '',
+      overtime: '',
+      suggestion: ''
+    }
+    let map = new Map()
+    subtypes.forEach(s => {
+      //鏈堝害缁熻
+      if (s.needUpdate) {
+        monthInfo.totalMust++
+        if (s.upLoad) {
+          monthInfo.finishedMust++
+        }
+      } else {
+        monthInfo.totalSelect++
+        if (s.upLoad) {
+          monthInfo.finishedSelect++
+        }
+      }
+
+      //閫夐」鍗�
+      if (s.upLoad) {
+        s.tag = '/res/icons/round_check_fill.png'
+        s.opacity = 0.7
+      } else if (s.ledgerFinished) {
+        s.tag = '/res/icons/warning_yellow.png'
+        s.opacity = 1
+      } else if (!s.needUpdate) {
+        s.tag = '/res/icons/warning_selected.png'
+        s.opacity = 0.8
+      } else {
+        s.tag = '/res/icons/warning_red.png'
+        s.opacity = 1
+      }
+      if (!map.has(s.ledgerType)) {
+        map.set(s.ledgerType, [])
+      }
+      map.get(s.ledgerType).push(s)
+    });
+
+    //
+    if (monthInfo.finishedMust == 0) {
+      monthInfo.status = '鏈彁浜�'
+      if (lastMonth) {
+        monthInfo.suggestion = '寤鸿锛氬綋鏈熷彴璐﹀畬鍏ㄦ湭鎻愪氦锛屼弗閲嶅奖鍝嶈瘎浼扮粨鏋滐紝鍚庣画璇锋敞鎰�'
+      } else {
+        monthInfo.suggestion = '寤鸿锛氳灏藉揩鎻愪氦鍙拌处'
+      }
+    } else if (monthInfo.finishedMust < monthInfo.totalMust) {
+      monthInfo.status = '閮ㄥ垎鎻愪氦'
+      if (lastMonth) {
+        monthInfo.suggestion = '寤鸿锛氬綋鏈熷彴璐﹂儴鍒嗘湭鎻愪氦锛屼細褰卞搷璇勪及缁撴灉锛屽悗缁灏介噺鎻愪氦鎵�鏈夊彴璐�'
+      } else {
+        monthInfo.suggestion = '寤鸿锛氬綋鍓嶅凡鎻愪氦閮ㄥ垎鍙拌处锛岃琛ュ叏鍓╀綑鍙拌处'
+      }
+    } else {
+      monthInfo.status = '宸叉彁浜�'
+      if (lastMonth) {
+        monthInfo.suggestion = '褰撴湡鍙拌处宸插叏閮ㄦ彁浜わ紝璇蜂繚鎸�'
+      } else {
+        monthInfo.suggestion = '鏈湡鍙拌处宸插叏閮ㄦ彁浜�'
+      }
+    }
+    monthInfo.overtime = moment().date() - this.DEADLINEDAY
+    monthInfo.percent = Math.round(monthInfo.finishedMust / monthInfo.totalMust * 100)
+
+    //閫夐」鍗�
+    var t = []
+    var p = []
+    for (let item of map) {
+      let notUpload = 0
+      item[1].forEach(l => {
+        if (l.needUpdate && !l.upLoad) {
+          notUpload++
+        }
+      });
+      t.push({
+        name: item[0],
+        tag: notUpload,
+        total: item[1].length
+      })
+      p.push(item[1])
+    }
+
+    return [t, p, monthInfo]
+  },
+
+  gotoLedgerDetail(e) {
+    var i = e.currentTarget.dataset.index.split(',')
+    var indexGroup = [parseInt(i[0]), parseInt(i[1])]
+    var ledger = this.data.pageList[indexGroup[0]][indexGroup[1]]
+
+    var that = this
+    wx.navigateTo({
+      url: '/pages/mLedger/ledgerupload/ledgerupload',
+      events: {
+        uploadOver: function (data) {
+          let i = data.indexGroup
+          let pageList = that.data.pageList
+          pageList[i[0]][i[1]].upLoad = true
+          pageList[i[0]][i[1]].tag = '/res/icons/round_check_fill.png'
+          pageList[i[0]][i[1]].opacity = 0.7
+          that.setData({
+            pageList
+          })
+        }
+      },
+      success: (res) => {
+        // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+        res.eventChannel.emit('acceptDataFromOpenerPage', {
+          ledger: ledger,
+          indexGroup: indexGroup
+        })
+      },
+    })
+  },
+
+  gotoHistory(){
+    let tabList = this.data.tabList
+    wx.navigateTo({
+      url: '/pages/mLedger/ledgerhistory/ledgerhistory',
+      success: (res) => {
+        // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+        res.eventChannel.emit('acceptDataFromOpenerPage', {
+          tabList: tabList,
+        })
+      },
+    })
+  },
+
+
+  //璁$畻swiper楂樺害鏂规硶锛堝湪鍒囨崲鐨勬椂鍊欒皟鐢級
+  tabsHeight(element) {
+    let that = this;
+    let query = wx.createSelectorQuery(); //蹇呴』瑕佸厛鍒涘缓涓�涓煡璇�
+    query.select(element).boundingClientRect(function (rect) {
+      let pageheight = that.data.pageheight.split('px')[0]
+      pageheight = parseInt(pageheight)
+      if (rect.height > pageheight) {
+        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 >= 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);	//鏌ヨ鍝竴涓厓绱�
+  },
+
+  changeMonth(){
+    let showThisMonth = !this.data.showThisMonth
+    this.setData({showThisMonth})
+  }
+})
\ No newline at end of file
diff --git a/pages/mLedger/ledgerhome/ledgerhome.json b/pages/mLedger/ledgerhome/ledgerhome.json
new file mode 100644
index 0000000..b012b03
--- /dev/null
+++ b/pages/mLedger/ledgerhome/ledgerhome.json
@@ -0,0 +1,7 @@
+{
+  "navigationBarTitleText": "鍙拌处绠$悊",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "usingComponents": {
+    "mp-icon": "/component/icon/icon"
+  }
+}
\ No newline at end of file
diff --git a/pages/mLedger/ledgerhome/ledgerhome.wxml b/pages/mLedger/ledgerhome/ledgerhome.wxml
new file mode 100644
index 0000000..9613cf8
--- /dev/null
+++ b/pages/mLedger/ledgerhome/ledgerhome.wxml
@@ -0,0 +1,87 @@
+<!--pages/mLedger/ledgerhome/ledgerhome.wxml-->
+<view class="page">
+  <view class="banner-bg"></view>
+  <view class="page__hd">
+    <!-- <view class="fyui-panel"> -->
+    <view class="head_right" bindtap="changeMonth">
+      <text class="head_tag">{{showThisMonth ? thisMonth + '鏈湀' : lastMonth + '涓婃湀'}}姹囨��</text>
+      <mp-icon style="margin-left: 4px;" icon="transfer2" color="white" size="{{20}}"></mp-icon>
+    </view>
+    <view class="card">
+      <block wx:if="{{showThisMonth}}">
+        <view class="head_row">
+          <view class="head_row_item">
+            <view class="head_tag">瀹屾垚搴�</view>
+            <view class="head_1 head_1_big">{{thisMonthInfo.percent}}<text class="head_row_item_tag">%</text></view>
+          </view>
+          <view class="head_row_item">
+            <view class="head_tag">蹇呭~椤�</view>
+            <view class="head_1">{{thisMonthInfo.finishedMust}}<text class="head_row_item_tag">/{{thisMonthInfo.totalMust}}</text></view>
+          </view>
+          <view class="head_row_item">
+            <view class="head_tag">閫夊~椤�</view>
+            <view class="head_1">{{thisMonthInfo.finishedSelect}}<text class="head_row_item_tag">/{{thisMonthInfo.totalSelect}}</text></view>
+          </view>
+        </view>
+        <view class="head_row">
+          <view class="head_tag">鏈湡鍙拌处鎻愪氦鏃ワ細{{deadline}}</view>
+          <block wx:if="{{thisMonthInfo.percent < 1}}">
+            <view wx:if="{{leftday > 0}}" class="head_tag">鍓╀綑<text>{{leftday}}</text>澶�</view>
+            <view wx:else class="head_tag">閫炬湡 <text>{{thisMonthInfo.overtime}}</text>澶�</view>
+          </block>
+        </view>
+        <view class="head_tag">{{thisMonthInfo.suggestion}}</view>
+
+      </block>
+      <block wx:else>
+        <view class="head_row">
+          <view class="head_row_item">
+            <view class="head_tag">瀹屾垚搴�</view>
+            <view class="head_1">{{lastMonthInfo.percent}}<text class="head_row_item_tag">%</text></view>
+          </view>
+          <view class="head_row_item">
+            <view class="head_tag">蹇呭~椤�</view>
+            <view class="head_1">{{lastMonthInfo.finishedMust}}<text class="head_row_item_tag">/{{lastMonthInfo.totalMust}}</text></view>
+          </view>
+          <view class="head_row_item">
+            <view class="head_tag">閫夊~椤�</view>
+            <view class="head_1">{{lastMonthInfo.finishedSelect}}<text class="head_row_item_tag">/{{lastMonthInfo.totalSelect}}</text></view>
+          </view>
+        </view>
+        <view class="head_row">
+          <view class="head_tag">鎻愪氦鎯呭喌锛歿{lastMonthInfo.status}}</view>
+        </view>
+        <view class="head_tag">寤鸿锛歿{lastMonthInfo.suggestion}}</view>
+      </block>
+    </view>
+    <view class="head_right">
+      <text class="head_btn" bindtap="gotoHistory">鍘嗗彶璁板綍 ></text>
+    </view>
+  </view>
+  <!-- </view> -->
+  <view class="page__bd">
+    <view class="swiper-tab">
+      <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 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>
+        </block>
+      </scroll-view>
+    </view>
+    <swiper current="{{currentTab}}" class="swiper-box" duration="300" bindchange="bindChange" style="height: {{pageheight}};">
+      <block wx:for="{{pageList}}" wx:for-item="page" wx:key="n" wx:for-index="i1">
+        <swiper-item>
+          <view class="ledger-group page{{i1}}">
+            <view wx:for="{{page}}" wx:for-item="ledger" wx:key="t" class="ledger-item" wx:for-index="i2" data-index="{{i1}},{{i2}}" bindtap="gotoLedgerDetail" style="opacity: {{ledger.opacity}};">
+              <image class="ledger-tag" src="{{ledger.tag}}" mode="aspectFit"></image>
+              <image class="ledger-icon" src="{{ledger.iconUrl}}"></image>
+              <view>{{ledger.ledgerName}}</view>
+            </view>
+          </view>
+        </swiper-item>
+      </block>
+    </swiper>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mLedger/ledgerhome/ledgerhome.wxss b/pages/mLedger/ledgerhome/ledgerhome.wxss
new file mode 100644
index 0000000..ce94f84
--- /dev/null
+++ b/pages/mLedger/ledgerhome/ledgerhome.wxss
@@ -0,0 +1,173 @@
+/* pages/mLedger/ledgerhome/ledgerhome.wxss */
+.banner-bg {
+  position: fixed;
+  width: 100%;
+  height: 60%;
+  background: linear-gradient(to bottom, #57E4CB, #83b6ae);
+}
+
+.page__hd {
+  /* text-align: center; */
+  display: flex;
+  flex-flow: column;
+  justify-content: flex-start;
+  /* color: #50854C; */
+  color: white;
+  padding: 8px 16px;
+}
+
+.card{
+  height: 26vh;
+  /* background-color: royalblue; */
+}
+
+.head_row{
+  display: flex;
+  /* padding: 0 30px; */
+  justify-content: space-between;
+  align-items: baseline;
+}
+
+.head_row_item{
+  text-align: center;
+  /* width: 20vw; */
+  flex: 1;
+  /* background-color: red; */
+}
+
+.head_row_item_tag{
+  font-size: 12px;
+  font-weight: 559;
+}
+
+.head_right {
+  text-align: end;
+  font-size: 12px;
+  /* background-color: brown; */
+  margin-bottom: 8px;
+  vertical-align: middle;
+}
+
+.head_tag{
+  font-size: 12px;
+  color: white;
+}
+
+.head_btn{
+  background-color: rgb(11, 90, 77);
+  padding: 4px 6px;
+  border-radius: 4px;
+}
+
+.head_btn:active{
+  background-color: rgba(11, 90, 77, 0.5);
+}
+
+.head_tag>text {
+  font-size: 40px;
+  font-weight: 600;
+}
+
+.head_1 {
+  font-size: 30px;
+}
+
+.head_1_big{
+  font-size: 30px;
+}
+
+.head_3 {
+  font-size: 12px;
+  margin-bottom: 16px;
+}
+
+.page__bd {
+  padding-bottom: 0;
+}
+
+.swiper-tab{
+  width: 100%;
+  text-align: center;
+  line-height: 80rpx;
+  white-space: nowrap;
+  z-index: 2;
+  /* background-color: #65EAD2; */
+  /* background-color: #70ea65; */
+  /* padding: 2px; */
+}
+
+.swiper-tab_view{
+  /* background-color: blueviolet; */
+}
+
+.swiper-tab-list{
+  position: relative;
+  font-size: 30rpx;
+  display: inline-block;
+  min-width: 18%;
+  padding: 0 16px;
+  color: rgba(255, 255, 255, 0.658);
+}
+
+.swiper-tab-list__tag{
+  position: absolute;
+  top: 2px;
+  right: 4px;
+  font-size: 10px;
+  line-height: 16px;
+  width: 16px;
+  background-color: brown;
+  border-radius: 50%;
+}
+
+.on{ 
+  color: white;
+  font-weight: bold;
+  border-bottom: 4rpx solid white;
+}
+
+.swiper-box{
+  display: block;
+  top: 80rpx;
+  width: 100%;
+  margin-top: 1px;
+  background-color: white;
+}
+
+.ledger-group {
+  display: flex;
+  flex-wrap: wrap;
+  /* background-color: white; */
+  justify-content: flex-start;
+}
+
+.ledger-item {
+  position: relative;
+  width: 33.33333vw;
+  text-align: center;
+  /* background-color: teal; */
+  margin-top: 16px;
+  margin-bottom: 16px;
+  font-size: x-small;
+}
+
+.ledger-item:active{
+  background-color: var(--fyui-BG-COLOR-ACTIVE);
+}
+
+.ledger-icon {
+  width: 60px;
+  height: 60px;
+}
+
+.ledger-tag {
+  position: absolute;
+  right: 6vw;
+  top: 6px;
+  width: 32px;
+  height: 16px;
+  color: white;
+  padding: 1px;
+  border-radius: 50%;
+  font-size: 10px;
+}
\ No newline at end of file
diff --git a/pages/mLedger/ledgerupload/ledgerupload.js b/pages/mLedger/ledgerupload/ledgerupload.js
new file mode 100644
index 0000000..7257283
--- /dev/null
+++ b/pages/mLedger/ledgerupload/ledgerupload.js
@@ -0,0 +1,133 @@
+// pages/mLedger/ledgerupload/ledgerupload.js
+import bUploadLedger from '../behaviors/bUploadLedger'
+import ledgerservice from "../../../service/ledgerservice"
+import moment from '../../../utils/moment.min'
+import bLoadingToast from '../../../base/behaviors/bLoadingToast'
+
+const app = getApp()
+
+Page({
+  behaviors: [bUploadLedger, bLoadingToast],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    imgFiles: [],
+
+    remark: '',
+    remarkDisable: false,
+
+    previewImageUrls:[],
+    previewCurrent: 0,
+    showPreview: false,
+
+    uploadMode: 0,
+  },
+
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    var that = this
+    this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function(data) {
+      that.setData({
+        ledger: data.ledger,
+        indexGroup: data.indexGroup
+      })
+      if (data.barTitle) {
+        wx.setNavigationBarTitle({
+          title: data.barTitle,
+        })
+      }
+
+      that.checkStatus()
+    })
+  },
+
+  checkStatus() {
+    if (this.data.ledger.path1) {
+      let imgFiles = this.data.ledger.path1
+      let remark = this.data.ledger.remark1 == null ? '' : this.data.ledger.remark1
+      let remarkDisable = true
+      this.setData({imgFiles, remark, remarkDisable})
+    }else if (this.data.ledger.upLoad) {
+      var that = this
+      var userId = app.globalData.accessToken.userId
+      var typeId = this.data.ledger.ledgerSubTypeId
+      var sceneType = app.globalData.userInfo.extension2
+      var time = moment().format('YYYY-MM-DD')
+      ledgerservice.getLedgerDetail(userId, typeId, sceneType, time, {
+        success (res) {
+          if (res.length > 0) {
+            let detail = res[0]
+            if (detail.upLoad) {
+              let imgFiles = detail.path1
+              let remark = detail.remark1 == null ? '' : detail.remark1
+              let remarkDisable = true
+              that.setData({imgFiles, remark, remarkDisable})
+            }
+          }
+        }
+      })
+    }
+  },
+
+  // 涓婁紶鍙拌处
+  onSubmit: function () {
+    if (this.data.imgFiles.length == 0) {
+      wx.showToast({
+        title: '璇疯嚦灏戦�夋嫨涓�寮犲浘鐗�',
+        icon: 'none',
+      })
+    } else {
+      this.setData({
+        showDialog: true,
+        uploadMode: 0
+      })
+    }
+  },
+
+  // 涓嶆秹鍙婅绫诲彴璐�
+  onSubmitNoLedger() {
+    this.setData({
+      showDialog: true,
+      uploadMode: 1
+    })
+  },
+
+  //鎻愪氦鍙拌处
+  submitLedger() {
+    this.setData({
+      showDialog: false,
+    })
+    if (this.uploadMode == 0) {
+      this._uploadLedger()      
+    } else {
+      this._uploadNoLedger()
+    }
+  },
+
+  //鍙拌处鎻愪氦鎴愬姛鍚�
+  _success(res) {
+    this.getOpenerEventChannel().emit('uploadOver', {
+      indexGroup: this.data.indexGroup
+    })
+    wx.navigateBack({
+      delta: 1,
+    })
+  },
+
+  //鍥剧墖鏀惧ぇ棰勮
+  previewImage(e) {
+    const {
+      index
+    } = e.currentTarget.dataset;
+    const previewImageUrls = this.data.imgFiles;
+    this.setData({
+      previewImageUrls,
+      previewCurrent: index,
+      showPreview: true
+    });
+  },
+})
\ No newline at end of file
diff --git a/pages/mLedger/ledgerupload/ledgerupload.json b/pages/mLedger/ledgerupload/ledgerupload.json
new file mode 100644
index 0000000..16f6fbb
--- /dev/null
+++ b/pages/mLedger/ledgerupload/ledgerupload.json
@@ -0,0 +1,10 @@
+{
+  "navigationBarTitleText": "涓婁紶鍙拌处",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "mp-upload":"/component/uploader/uploader",
+    "c-dialog": "/component/commondialog/commondialog",
+    "mp-gallery": "/component/gallery/gallery"
+  }
+}
\ No newline at end of file
diff --git a/pages/mLedger/ledgerupload/ledgerupload.wxml b/pages/mLedger/ledgerupload/ledgerupload.wxml
new file mode 100644
index 0000000..912a2d7
--- /dev/null
+++ b/pages/mLedger/ledgerupload/ledgerupload.wxml
@@ -0,0 +1,27 @@
+<!--pages/mLedger/ledgerupload/ledgerupload.wxml-->
+<view class="page">
+  <view class="page__hd">
+    {{ledger.ledgerName}}
+  </view>
+  <view class="page__bd">
+    <textarea disabled="{{remarkDisable}}" value="{{remark}}" class="text-area" name="des" cols="30" rows="10" placeholder="鍙�夊垯杈撳叆鍙拌处澶囨敞"></textarea>
+    <view wx:if="{{!ledger.upLoad}}" class="weui-upload-view">
+      <mp-upload title="涓婁紶鍙拌处鍥剧墖" titleClass="upload-title-class" max-count="6" files="{{imgFiles}}"
+        binduploadImg="uploadFile" binddelete="delImg"></mp-upload>
+    </view>
+    <view wx:else class="img-group">
+      <view wx:for="{{imgFiles}}" wx:key="index">
+        <image class="img-group_img" src="{{item}}" mode="aspectFill" bindtap="previewImage" data-index="{{index}}"></image>
+      </view>
+    </view>
+  </view>
+  <view class="page__ft">
+    <view wx:if="{{!ledger.upLoad}}" class="submit" bindtap="onSubmit">鎻愪氦</view>
+    <view wx:if="{{!ledger.upLoad && ledger.ledgerTypeId != -1}}" class="submit submit-2" bindtap="onSubmitNoLedger">涓嶆秹鍙婅绫诲彴璐�</view>
+  </view>
+
+  <c-dialog show="{{showDialog}}" yes="纭" bindconfirm="submitLedger">
+    <view>{{uploadMode == 0 ? '纭鏄惁鎻愪氦鍙拌处锛�' : '纭鏈湀璇ュ彴璐︿笉娑夊強锛�'}}</view>
+  </c-dialog>
+  <mp-gallery class="gallery" hide-on-click="{{true}}" show-delete="{{false}}" show="{{showPreview}}" img-urls="{{previewImageUrls}}" current="{{previewCurrent}}"></mp-gallery>
+</view>
\ No newline at end of file
diff --git a/pages/mLedger/ledgerupload/ledgerupload.wxss b/pages/mLedger/ledgerupload/ledgerupload.wxss
new file mode 100644
index 0000000..733c06b
--- /dev/null
+++ b/pages/mLedger/ledgerupload/ledgerupload.wxss
@@ -0,0 +1,45 @@
+/* pages/mLedger/ledgerupload/ledgerupload.wxss */
+.page {
+  background-color: white;
+}
+
+.page__hd {
+  font-weight: 600;
+}
+
+.page__bd {
+  padding: 10px;
+}
+
+.upload-title-class {
+  font-size: small;
+}
+
+.text-area {
+  background-color: rgba(255, 255, 255, 0.185);
+  width: 100%;
+}
+
+.img-group {
+  display: flex;
+  flex-wrap: wrap;
+}
+
+.img-group>view {
+  width: 30vw;
+  text-align: center;
+}
+
+.img-group .img-group_img {
+  width: 29vw;
+  height: 29vw;
+}
+
+.submit-2 {
+  background: var(--fyui-BG_1);
+  color: var(--fyui-primary-color);
+}
+
+.submit-2:active {
+  background: #dfdfdf;
+}
\ No newline at end of file
diff --git a/pages/mNotice/notice/notice.js b/pages/mNotice/notice/notice.js
new file mode 100644
index 0000000..32cc542
--- /dev/null
+++ b/pages/mNotice/notice/notice.js
@@ -0,0 +1,99 @@
+// pages/notice/notice.js
+const notificationservice = require("../../../service/notificationservice")
+const moment = require('../../../utils/moment.min')
+const util = require("../../../utils/util.js")
+const app = getApp()
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    currentTab: 0,
+    tabList: [{
+        "name": "宸ヤ綔閫氱煡"
+      },
+      {
+        "name": "棰勮璀︾ず"
+      },
+      {
+        "name": "绯荤粺閫氱煡"
+      }
+    ],
+    pageList: [
+      [],
+      [],
+      []
+    ]
+  },
+
+  //璁$畻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.getNotice()
+  },
+
+  onReachBottom () {
+    if (this.cPage && this.tPage) {
+      if (this.cPage < this.tPage) {
+        this.getNotice(this.cPage + 1)
+      }
+    }
+  },
+
+  getNotice(cPage = 1) {
+    var that = this
+    notificationservice.getNotification(app.globalData.accessToken.userId, cPage, {
+      onHead(header) {
+        that.cPage = parseInt(header.currentPage)
+        that.tPage = parseInt(header.totalPage)
+        console.log(`cPage:${that.cPage}, tPage:${that.tPage}`);
+      },
+      success(res) {
+        res.forEach(r => {
+          r.updateTime = moment(r.updateTime).format('YYYY骞碝M鏈圖D鏃�')
+        });
+        let notices = that.data.pageList[0].concat(res)
+        that.setData({
+          ['pageList[0]']: notices
+        })
+
+        that.tabsHeight('.page0');	//鍒锋柊楂樺害
+      }
+    }, 5)
+  },
+})
\ No newline at end of file
diff --git a/pages/mNotice/notice/notice.json b/pages/mNotice/notice/notice.json
new file mode 100644
index 0000000..cc5ffee
--- /dev/null
+++ b/pages/mNotice/notice/notice.json
@@ -0,0 +1,5 @@
+{
+  "navigationBarTitleText": "鏅鸿兘宸ヤ綔鎻愰啋",
+  "navigationBarBackgroundColor": "#EAFFF1",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mNotice/notice/notice.wxml b/pages/mNotice/notice/notice.wxml
new file mode 100644
index 0000000..0753be8
--- /dev/null
+++ b/pages/mNotice/notice/notice.wxml
@@ -0,0 +1,48 @@
+<!--pages/notice/notice.wxml-->
+<import src="/template/nodata.wxml"></import>
+
+<view class="page">
+  <view class="swiper-tab">
+    <scroll-view scroll-left="{{navScrollLeft}}" scroll-x="true" show-scrollbar="false" scroll-with-animation="true">
+      <block wx:for="{{tabList}}" wx:key="i">
+        <view class="swiper-tab-list {{currentTab==index ? 'on' : ''}}" data-current="{{index}}" bindtap="swichNav">{{item.name}}</view>
+      </block>
+    </scroll-view>
+  </view>
+
+  <swiper current="{{currentTab}}" class="swiper-box" duration="300" bindchange="bindChange" style="height: {{pageheight}};">
+    <block wx:for="{{pageList}}" wx:for-item="page" wx:key="n">
+      <swiper-item>
+        <view class="page{{index}}">
+          <block wx:if="{{page.length > 0}}">
+            <view wx:for="{{page}}" wx:for-item="notice" wx:key="index">
+              <view class="fyui-box  fyui-box__text">
+                <view class="fyui-box__hd">
+                  <image src="/res/icons/notice.png" class=""></image>
+                  <view class="title">
+                    <view>宸ヤ綔閫氱煡</view>
+                    <text>{{notice.updateTime}}</text>
+                  </view>
+                </view>
+                <view class="fyui-box__bd">
+                  <!-- <view class="fyui-box__content tag">鐩稿叧琛屼笟 -> {{item.fileIndustry}}</view> -->
+                  <text class="fyui-box__content des">{{notice.content}}</text>
+                </view>
+                <view class="fyui-box__ft">
+                  <!-- <text class="detail">鏌ョ湅璇︽儏 ></text> -->
+                  <button wx:if="{{notice.needSigned}}" class="sign" size="mini" type="{{notice.hasSigned ? 'default' : 'primary'}}" plain="{{notice.hasSigned}}" loading="">
+                    {{notice.hasSigned ? '宸茬鏀�' : '绛炬敹'}}
+                  </button>
+                </view>
+              </view>
+            </view>
+            <view class="page__ft"></view>
+          </block>
+          <template is="nodataPage" wx:else></template>
+        </view>
+      </swiper-item>
+    </block>
+  </swiper>
+
+
+</view>
\ No newline at end of file
diff --git a/pages/mNotice/notice/notice.wxss b/pages/mNotice/notice/notice.wxss
new file mode 100644
index 0000000..06fd8ad
--- /dev/null
+++ b/pages/mNotice/notice/notice.wxss
@@ -0,0 +1,103 @@
+/* pages/notice/notice.wxss */
+.swiper-tab{
+  position: fixed;
+  width: 100%;
+  text-align: center;
+  line-height: 80rpx;
+  white-space: nowrap;
+  z-index: 2;
+  background-color: #EAFFF1;
+}
+
+.swiper-tab-list{
+  font-size: 30rpx;
+  display: inline-block;
+  min-width: 30%;
+  padding: 0 1%;
+  color: black;
+}
+
+.on{ 
+  color: #6BD9B9;
+  font-weight: bold;
+  border-bottom: 4rpx solid #6BD9B9;
+}
+
+.swiper-box{
+  position: absolute;
+  display: block;
+  top: 80rpx;
+  width: 100%;
+  /* margin-top: 10px; */
+  background-color: var(--fyui-BG_1);
+}
+
+.fyui-box {
+  margin-bottom: 16px;
+}
+
+
+.fyui-box .fyui-box__hd {
+  display: flex;
+  align-items: center;
+}
+
+.title {
+  display: flex;
+  width: 100%;
+  justify-content: space-between;
+  align-items: flex-end;
+  font-size: 40rpx;
+}
+.title>text {
+  font-size: small;
+  color: var(--fyui-text-color_2);
+}
+
+
+.fyui-box .fyui-box__hd>image {
+  width: 12px;
+  height: 12px;
+  background-color: #4C97F8;
+  padding: 5px;
+  border-radius: 50%;
+}
+
+.fyui-box__ft {
+  /* position: relative; */
+  /* padding: 20px; */
+  margin-top: 40px;
+  align-items: center;
+}
+
+.fyui-box__ft:before{
+  content: " ";
+  width: 100%;
+  height: 1px;
+  background-color: var(--fyui-BG_1);
+  bottom: 50px;
+  position: absolute;
+}
+
+.detail {
+  white-space: nowrap;
+  color: var(--fyui-text-color_1);
+}
+.sign {
+  background-color: red;
+  margin: 0;
+}
+
+.des {
+  /* display: -webkit-box;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 4;
+  width: 100%;
+  overflow: hidden; */
+  /* text-overflow: ellipsis; */
+  font-size: 30rpx !important;
+}
+
+.page__ft {
+  color: var(--fyui-text-color_2);
+}
\ No newline at end of file
diff --git a/pages/mPromise/promisefile/promisefile.js b/pages/mPromise/promisefile/promisefile.js
new file mode 100644
index 0000000..7dd89ed
--- /dev/null
+++ b/pages/mPromise/promisefile/promisefile.js
@@ -0,0 +1,154 @@
+// pages/promisefile/promisefile.js
+const {promise} = require('../../../data/promise')
+const promiseservice = require("../../../service/promiseservice")
+const app = getApp()
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    imgFiles: []
+  },
+
+  commitmentVo: {
+    city: '',
+    district: '',
+    department: '',
+    socialCode: '',
+    number: '',
+    juridicalPerson: '',
+    idNo: '',
+    type1: false,
+    type2: false,
+    type3: false,
+    type4: false,
+    year: '',
+    month: '',
+    day: ''
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad: function (options) {
+    var that = this
+    var date = new Date()
+    var year = date.getFullYear()
+    var mon = date.getMonth() + 1
+    var day = date.getDate()
+    this.setData({
+      date: `${year}骞�${mon}鏈�${day}鏃
+    })
+
+    this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function (data) {
+      that.commitmentVo = data
+    })
+
+    let st = app.globalData.userInfo.extension2
+    let t = promise[st]
+    this.setData({
+      promiseText: promise[st]
+    })
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady: function () {
+    // this.selectComponent('#sign-dialog').init()
+  },
+
+  startSign() {
+    var that = this
+
+    wx.navigateTo({
+      url: '/pages/mPromise/promisesign/promisesign',
+      events: {
+        onSignSuccess: function (imgPath) {
+          console.log('signover:' + imgPath);
+          that.signOver(imgPath)
+        }
+      },
+    })
+    
+    // wx.getStorage({
+    //   key: 'signPath',
+    //   success: (result) => {
+    //     console.log(result.data);
+    //     that.signOver(result.data)
+    //   },
+    //   fail: (res) => {
+    //     console.log(res);
+    //     wx.navigateTo({
+    //       url: '/pages/promisesign/promisesign',
+    //       events: {
+    //         onSignSuccess: function (imgPath) {
+    //           console.log('signover:' + imgPath);
+    //           that.signOver(imgPath)
+    //         }
+    //       },
+    //     })
+    //   },
+    //   complete: (res) => {},
+    // })
+  },
+
+  signOver(imgPath) {
+    let path = "imgFiles[0]"
+    this.setData({
+      [path]: imgPath
+    })
+  },
+
+  onSubmit: function () {
+    // wx.setStorage({
+    //   key: "promise",
+    //   data: true,
+    // })
+    // wx.navigateTo({
+    //   url: '/pages/promiseresult/promiseresult',
+    // })
+    wx.showLoading({
+      title: '鎵胯涔︾敓鎴愪腑',
+      mask: true,
+      success: (res) => {},
+      fail: (res) => {},
+      complete: (res) => {},
+    })
+    // setTimeout(() => {
+    //   wx.hideLoading()
+    // }, 20000);
+
+    let signPic = this.data.imgFiles[0]
+
+    promiseservice.createCommitment(app.globalData.accessToken.userId, this.commitmentVo, signPic, {
+      success(data) {
+        if (data.success) {
+          wx.navigateTo({
+            url: '/pages/mPromise/promiseresult/promiseresult',
+            success: function (res) {
+              console.log(res);
+              // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+              res.eventChannel.emit('acceptDataFromOpenerPage', {
+                promise: {
+                  picPath: data.data[0],
+                  pdfPath: data.data[1],
+                }
+              })
+            }
+          }) 
+        }
+      },
+      fail(res) {
+      },
+      complete(res) {
+        console.log(res);
+        wx.hideLoading({
+        })
+      }
+    })
+
+  }
+})
\ No newline at end of file
diff --git a/pages/mPromise/promisefile/promisefile.json b/pages/mPromise/promisefile/promisefile.json
new file mode 100644
index 0000000..53e208b
--- /dev/null
+++ b/pages/mPromise/promisefile/promisefile.json
@@ -0,0 +1,10 @@
+{
+  "usingComponents": {
+    "mp-upload":"/component/uploader/uploader",
+    "mp-icon": "/component/icon/icon",
+    "c-dialog": "/component/commondialog/commondialog"
+  },
+  "navigationBarTitleText": "瀹堟硶鎵胯涔�",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white"
+}
\ No newline at end of file
diff --git a/pages/mPromise/promisefile/promisefile.wxml b/pages/mPromise/promisefile/promisefile.wxml
new file mode 100644
index 0000000..84707b7
--- /dev/null
+++ b/pages/mPromise/promisefile/promisefile.wxml
@@ -0,0 +1,46 @@
+<!--pages/promisefile/promisefile.wxml-->
+<view class="page">
+  <view class="banner-bg"></view>
+  <view class="page__bd">
+    <view class="fyui-panel">
+      <view class="p-title">瀹堟硶鎵胯涔�</view>
+      <text class="p-content">
+        <!-- 涓烘帹鍔ㄧ粡娴庣ぞ浼氬彲鎸佺画鍙戝睍锛屼笉鏂敼鍠勫尯鍩熺幆澧冭川閲忥紝鍔姏鍔犲揩鐢熸�佸煄甯傚缓璁炬浼愶紝鏈紒涓氶儜閲嶆壙璇猴細\n
+        涓�銆佺墷鍥烘爲绔嬬幆淇濇剰璇嗐�傛繁鍏ュ紑灞曠幆澧冨浼犳暀鑲诧紝鍊″绉戝鍙戝睍鐞嗗康锛屽姞寮轰紒涓氭枃鍖栧缓璁撅紝鏍戠珛鈥滀繚鎶ょ幆澧冨厜鑽o紝姹℃煋鐜鍙�烩�濇剰璇嗭紝鍧氭寔鍦ㄤ紒涓氬彂灞曚腑鍔犲己鐜淇濇姢锛屽湪淇濇姢鐜涓績杩涗紒涓氬彂灞曘��
+        寮哄寲淇濇姢鐜灏辨槸淇濇姢缇や紬鍋ュ悍鐨勭ぞ浼氳矗浠绘劅锛屽潥鎸佲�滈闃蹭负涓汇�侀槻娌荤粨鍚堚�濇柟閽堬紝鍒囧疄鑲╄礋璧风幆澧冧繚鎶ょ殑绀句細璐d换锛屼績杩涚ぞ浼氥�佺粡娴庡拰鐜鐨勫彲鎸佺画鍙戝睍銆俓n
+        浜屻�佷弗鏍奸伒瀹堢幆淇濇硶瑙勩�傚潥鍐宠疮褰昏惤瀹炵幆澧冧繚鎶ゆ斂绛栨硶瑙勫拰鏍囧噯锛屼弗鏍兼墽琛屾帓姹$敵鎶ュ拰鎺掓薄鏀惰垂绛夊埗搴︼紝鑷閬靛畧寤鸿椤圭洰鐜褰卞搷璇勪环鍜屸�滀笁鍚屾椂鈥濊瀹氾紝涓诲姩鎺ュ彈鐜鐜板満鎵ф硶妫�鏌ュ拰鐩戠潱绠$悊锛�
+        鍋氬埌鏃犵幆澧冩薄鏌撲簨鏁呭彂鐢燂紝纭繚鐜璐ㄩ噺鏀瑰杽銆俓n
+        涓夈�佸垏瀹炲姞寮烘薄鏌撻槻娌汇�傚潥鎸佽蛋绉戞妧鍚噺楂樸�佽祫婧愭秷鑰楀皯銆佺幆澧冩薄鏌撳皯銆佺粡娴庢晥鐩婂ソ鐨勬柊鍨嬪伐涓氬寲閬撹矾銆傚姞寮轰紒涓氳妭鑳藉噺鎺掓姇鍏ュ拰鎶�鏈敼閫犲姏搴︼紝纭繚鑺傝兘鍑忔帓鐩爣鍏ㄩ潰瀹炵幇銆傚姞寮烘薄鏌撴不鐞嗚鏂界殑杩愯绠$悊锛岀‘淇濆簾姘淬�佸簾姘斻�佸櫔澹板拰鍥哄簾杈炬爣鎺掓斁銆備富鍔ㄦ窐姹拌惤鍚庣殑鐢熶骇璁惧鍜屽伐鑹猴紝绉瀬瀹炴柦娓呮磥鐢熶骇锛屽彂灞曞惊鐜粡娴庯紝鎻愰珮璧勬簮鐨勫悎鐞嗗埄鐢ㄧ巼锛屽噺灏戞薄鏌撶墿鐨勬帓鏀俱�傚埗璁㈢瀛﹀彲琛岀殑绐佸彂鐜浜嬩欢搴旀�ラ妗堬紝骞剁粍缁囧簲鎬ユ紨缁冿紝纭繚鐜瀹夊叏銆俓n
+        鍥涖�佽嚜瑙夋帴鍙楃ぞ浼氱洃鐫c�傚姞寮轰紒涓氱幆澧冪鐞嗭紝寮哄寲璇氫俊鎰忚瘑锛屾仾瀹堢幆淇濅俊鐢紝灏嗚瘹淇$悊蹇佃疮绌夸簬浼佷笟鐢熶骇缁忚惀鍏ㄨ繃绋嬶紝鍏ㄥ姏鎵撻�犫�滆祫婧愯妭绾﹀瀷鍜岀幆澧冨弸濂藉瀷鈥濅紒涓氬搧鐗屻�傛墡瀹炴帹杩涗紒涓氱幆澧冧俊鎭叕寮�宸ヤ綔锛屼富鍔ㄥ鐞嗗ソ鍘傜兢鍏崇郴锛岃嚜瑙夌淮鎶ゅソ缇や紬鐨勭幆澧冩潈鐩婏紝鑷鎺ュ彈绀句細鍏紬鍜屾柊闂诲獟浣撶洃鐫c�傝繖鏄垜浠悜绀句細浣滃嚭鐨勫簞涓ユ壙璇猴紝鏁绀句細鍚勭晫浜堜互鐩戠潱銆傛垜浠皢杩涗竴姝ュ姞寮鸿嚜寰嬫剰璇嗭紝瑙嗙幆淇濅负浼佷笟鐢熷懡锛屽仛璇氫俊瀹堟硶浼佷笟銆俓n -->
+        {{promiseText}}
+      </text>
+      <view style="text-align: end;">{{date}}</view>
+      <view class="flex-h" style="margin-top: 16px;">
+        <view>
+          <text class="p-sign">娉曚汉绛惧悕锛堝繀濉級</text>
+          <view class="weui-upload-view">
+            <!-- <mp-upload data-type="0" max-count="1" files="{{imgFiles[0]}}" binduploadImg="uploadFile" binddelete="delImg"></mp-upload> -->
+            <view wx:if="{{imgFiles.length == 0}}" class="">
+              <view class="top-right" bindtap="startSign">
+                <view class="sign-btn">
+                  <mp-icon type="field" icon="add" color="gray" size="{{60}}"></mp-icon>
+                </view>
+              </view>
+            </view>
+            <image wx:else class="sign-img" src="{{imgFiles[0]}}" mode="aspectFill" />
+          </view>
+        </view>
+        <view style="display: none;">
+          <text class="p-sign">鍗曚綅绛剧珷锛堥�夊~锛�</text>
+          <view class="weui-upload-view">
+            <mp-upload data-type="1" max-count="1" files="{{imgFiles[1]}}" binduploadImg="uploadFile"
+              binddelete="delImg"></mp-upload>
+          </view>
+        </view>
+      </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/mPromise/promisefile/promisefile.wxss b/pages/mPromise/promisefile/promisefile.wxss
new file mode 100644
index 0000000..649c84a
--- /dev/null
+++ b/pages/mPromise/promisefile/promisefile.wxss
@@ -0,0 +1,63 @@
+/* pages/promisefile/promisefile.wxss */
+.page__bd {
+  font-size: 14px;
+}
+
+.banner-bg {
+  position: fixed;
+  width: 100%;
+  height: 5vh;
+  background-color: #57E4CB;
+}
+
+.fyui-panel {
+  padding: 8px;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+}
+
+.p-title {
+  text-align: center;
+  padding-top: 16px;
+  font-size: 20px;
+  font-weight: 600;
+}
+
+.p-content {
+  font-size: 14px;
+}
+
+.p-sign {
+  font-size: 12px;
+  color: var(--fyui-text-color_2);
+}
+
+.submit {
+  border-radius: 4px;
+  background: linear-gradient(to right, #6DF1A9, #62EBCF);
+  margin: 8px;
+  color: white;
+  padding: 8px;
+}
+
+.sign-btn {
+  width: 96px;
+  height: 96px;
+  text-align: center;
+}
+
+.sign-img {
+  float: left;
+  margin-right: 8px;
+  margin-bottom: 8px;
+  width: 96px;
+  height: 96px;
+  background: no-repeat 50%;
+  background-size: cover
+}
+
+.top-right {
+  margin-top: 6px;
+  margin-right: 6px;
+}
\ No newline at end of file
diff --git a/pages/mPromise/promisehome/promise.js b/pages/mPromise/promisehome/promise.js
new file mode 100644
index 0000000..a02952c
--- /dev/null
+++ b/pages/mPromise/promisehome/promise.js
@@ -0,0 +1,161 @@
+// pages/promise/promise.js
+const moment = require('../../../utils/moment.min')
+const promiseservice = require("../../../service/promiseservice")
+const app = getApp()
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    text1: "宸插紑鍚�!璇峰強鏃跺畬鎴愭壙璇�",
+    text3: "鍘绘壙璇�",
+    status: 0,
+
+    promise: [{
+      period: '鎵胯鍛ㄦ湡锛�2021骞�1鏈垀2021骞�12鏈�',
+      time: '2021骞�1鏈�6鏃ュ畬鎴�',
+      picPath: [],
+      pdfPath: ''
+    }],
+    deadline: "鎵胯鎴鏃堕棿锛�----骞�--鏈�--鏃�",
+  },
+
+  promiseHistory: [],
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad: function (options) {
+    this._initPlanYear()
+    // this.getCommitment()
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow: function () {
+    console.log("promise: onshow");
+    this.getCommitment()
+  },
+
+  /**
+   * 鍒濆鍖栧勾浠�
+   */
+  _initPlanYear() {
+    var now = moment()
+    var year = now.year()
+    var period = `${now.year()}/${now.month()+1}-${now.month()+1}`
+    var deadline = now.endOf('year').format("YYYY骞碝M鏈圖D鏃�")
+    this.setData({
+      year: year,
+      // deadline: `鎵胯鎴鏃堕棿锛�${deadline}`
+      deadline: ''
+    })
+  },
+
+  /**
+   * 鍒ゆ柇褰撳墠鍛ㄦ湡鍐呯殑鎵胯鏄惁瀹屾垚
+   */
+  checkStatus() {
+    if (this.promiseHistory.length > 0) {
+      var first = this.promiseHistory[0]
+      var cTime = moment(first.cmCreateTime)
+      let leftDays = cTime.add(1, 'years').diff(moment(), 'days')
+      // that.setData({
+      //   promsieInfo: {
+      //     leftDays: leftDays
+      //   }
+      // })
+      if (leftDays > 0) {
+        var deadline = cTime.format("YYYY-MM-DD")
+        this.setData({
+          text1: "鏈鎵胯宸插畬鎴�",
+          text3: "鏌ョ湅鎵胯",
+          status: 1,
+          deadline: `鎵胯鏈夋晥鏃堕棿锛氬墿浣�${leftDays}澶ー
+        })
+      } else {
+        this.setData({
+          text1: "璇峰強鏃跺畬鎴愭壙璇�",
+          text3: "鍘绘壙璇�",
+          status: 0,
+        })
+        this._initPlanYear()
+      }
+    }
+  },
+
+  /**
+   * 鑾峰彇鍘嗗彶璁板綍
+   */
+  getCommitment() {
+    var that = this
+    promiseservice.getCommitment(app.globalData.accessToken.userId, {
+      success(data) {
+        that.promiseHistory = data
+        let promise = []
+        data.forEach(d => {
+          const time = moment(d.cmCreateTime)
+          promise.push({
+            period: `鎵胯鍛ㄦ湡锛�${time.year()}骞�1鏈垀${time.year()}骞�12鏈坄,
+            time: `${time.format('YYYY骞碝M鏈圖D鏃�')}瀹屾垚`,
+            picPath: d.cmUrl,
+            pdfPath: d.cmPdfUrl
+          })
+        });
+        that.setData({
+          promise
+        })
+
+        that.checkStatus()
+      }
+    })
+  },
+
+  /**
+   * 璺宠浆鑷冲幓鎵胯
+   */
+  gotoPromise(e) {
+    var status = e.currentTarget.dataset.status
+    if (status == 0) {
+      wx.navigateTo({
+        url: '/pages/mPromise/promiseinfo/promiseinfo'
+      })
+    } else {
+      this.gotoResult(0)
+    }
+  },
+
+  /**
+   * 璺宠浆鑷虫壙璇鸿鎯�
+   */
+  gotoDetail(e) {
+    var i = e.currentTarget.dataset.index
+    this.gotoResult(i)
+  },
+
+  gotoResult(i) {
+    var p = this.data.promise[i]
+    wx.navigateTo({
+      url: '/pages/mPromise/promiseresult/promiseresult',
+      success: function (res) {
+        // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+        res.eventChannel.emit('acceptDataFromOpenerPage', {
+          promise: {
+            picPath: p.picPath,
+            pdfPath: p.pdfPath
+          }
+        })
+      }
+    })
+  },
+
+  /**
+   * 璺宠浆鑷冲巻鍙茶褰�
+   */
+  gotoHistory() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/mPromise/promisehome/promise.json b/pages/mPromise/promisehome/promise.json
new file mode 100644
index 0000000..7880e90
--- /dev/null
+++ b/pages/mPromise/promisehome/promise.json
@@ -0,0 +1,5 @@
+{
+  "usingComponents": {},
+  "navigationBarTitleText": "瀹堟硶鎵胯",
+  "navigationBarBackgroundColor": "#57E4CB"
+}
\ No newline at end of file
diff --git a/pages/mPromise/promisehome/promise.wxml b/pages/mPromise/promisehome/promise.wxml
new file mode 100644
index 0000000..0b62d25
--- /dev/null
+++ b/pages/mPromise/promisehome/promise.wxml
@@ -0,0 +1,35 @@
+<!--pages/promise/promise.wxml-->
+<import src="/template/nodata.wxml"></import>
+
+<view class="page">
+  <!-- <view class="banner-bg"></view> -->
+
+  <view class="page__hd">
+    <view>
+      <view class="title">{{text1}}</view>
+      <view class="tag">{{deadline}}</view>
+      <view class="btn" bindtap="gotoPromise" data-status="{{status}}">{{text3}}</view>
+    </view>
+    <view wx:if="{{status == 1}}" bindtap="gotoPromise" data-status="{{status}}">
+      <image class="file" src="{{promise[0].picPath[0]}}" mode="aspectFit"></image>
+      <view class="tag">{{promise[0].time}}</view>
+    </view>
+  </view>
+  <view class="page__bd">
+    <view class="fyui-cell fyui-cell_select title">
+      <view class="fyui-cell__bd">鍘嗗彶鎵胯</view>
+      <view class="fyui-cell__ft">鏌ョ湅鏇村</view>
+    </view>
+    <block wx:if="{{promise.length > 0}}">
+      <view wx:for="{{promise}}" wx:key="index">
+        <view class="p-cell fyui-panel">
+          <view class="p-title">| 瀹堟硶鎵胯</view>
+          <view class="p-content">{{item.period}}</view>
+          <view class="p-tag">{{item.time}}</view>
+          <view class="p-btn" bindtap="gotoDetail" data-index="{{index}}">鍘荤湅鐪�</view>
+        </view>
+      </view>
+    </block>
+    <template wx:else is="nodataPage"></template>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mPromise/promisehome/promise.wxss b/pages/mPromise/promisehome/promise.wxss
new file mode 100644
index 0000000..cc528fb
--- /dev/null
+++ b/pages/mPromise/promisehome/promise.wxss
@@ -0,0 +1,77 @@
+/* pages/promise/promise.wxss */
+.banner-bg {
+  position: fixed;
+  width: 100%;
+  height: 50vh;
+  background: linear-gradient(to bottom, #57E4CB, #bbf3eb);
+}
+.page__hd {
+  background: linear-gradient(to bottom, #57E4CB, #bbf3eb);
+  height: 30vh;
+  display: flex;
+  justify-content: space-between;
+}
+
+.page__hd .title {
+  font-size: 20px;
+  font-weight: 600;
+  margin-top: 8px;
+}
+
+.page__hd .tag {
+  font-size: 12px;
+  color: #55A37D;
+  margin-top: 8px;
+  /* background-color: red; */
+  text-align: end;
+}
+
+.page__hd .btn {
+  border-radius: 20px;
+  line-height: 20px;
+  background: linear-gradient(to right, #6EF0A5, #62EAD2);
+  padding: 8px 4px;
+  text-align: center;
+  color: white;
+  width: 30vw;
+  margin-top: 50px;
+}
+
+.page__hd .file {
+  width: 40vw;
+  height: 25vh;
+}
+
+.p-cell{
+  position: relative;
+  padding: 8px;
+}
+
+.p-title{
+  font-weight: 600;
+  font-size: 14px;
+  color: #5CE395;
+}
+
+.p-content{
+  margin-top: 16px;
+  margin-bottom: 16px;
+  font-size: 16px;
+  font-weight: 600;
+}
+
+.p-tag{
+  color: var(--fyui-text-color_3);
+  font-size: 10px;
+}
+
+.p-btn{
+  position: absolute;
+  top: 0;
+  right: 0;
+  border-radius: 4px;
+  background: linear-gradient(to right, #6EF0A5, #62EAD2);
+  padding: 4px 16px;
+  color: white;
+  font-size: 14px;
+}
\ No newline at end of file
diff --git a/pages/mPromise/promiseinfo/promiseinfo.js b/pages/mPromise/promiseinfo/promiseinfo.js
new file mode 100644
index 0000000..d58c370
--- /dev/null
+++ b/pages/mPromise/promiseinfo/promiseinfo.js
@@ -0,0 +1,276 @@
+// pages/promiseinfo/promiseinfo.js
+const userservice = require("../../../service/userservice")
+const app = getApp()
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    sceneTypeMap: {
+      '1': '椁愰ギ',
+      '2': '宸ュ湴',
+      '3': '鐮佸ご',
+      '4': '鍫嗗満',
+      '5': '鎼呮媽绔�',
+      '6': '宸ヤ笟浼佷笟',
+      '7': '姹戒慨',
+    },
+    sceneType: '--',
+
+    msg: [{
+        name: "鍗曚綅鍚嶇О",
+        id: "department",
+        input: true,
+        value: "",
+        noValue: false
+      },
+      {
+        name: "淇$敤浠g爜",
+        id: "socialCode",
+        input: true,
+        value: "",
+        noValue: false
+      },
+      {
+        name: "鎶ュ缓鍙�",
+        id: "number",
+        input: true,
+        value: "",
+        noValue: false,
+        required: false
+      },
+      {
+        name: "娉曚汉濮撳悕",
+        id: "juridicalPerson",
+        input: true,
+        value: '',
+        noValue: false
+      },
+      {
+        name: "韬唤璇佸彿",
+        id: "idNo",
+        input: true,
+        value: "",
+        noValue: false,
+        maxLength: 18
+      },
+    ],
+
+    commitTypes: [{
+        value: 'type1',
+        name: '鐜繚涓讳綋璐d换鎵胯',
+        checked: true
+      },
+      {
+        value: 'type2',
+        name: '鐜琛屾斂璁稿彲浜嬮」',
+        checked: false
+      },
+      {
+        value: 'type3',
+        name: '鐜繚涓撻」璧勯噾鎴栧叾浠栬祫閲戣ˉ鍔�',
+        checked: false
+      },
+      {
+        value: 'type4',
+        name: '鍏朵粬鐜繚鐢虫姤浜嬮」',
+        checked: false
+      }
+    ],
+    commitTypeIndex: 0,
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad: function (options) {
+    let st = app.globalData.userInfo.extension2
+    switch (st) {
+      case '2':
+      case '3':
+      case '4':
+      case '5':
+      case '6':
+        this.setData({
+          'msg[2].name': '鎶ュ缓鍙�'
+        })
+        break;
+      case '1':
+        this.setData({
+          'msg[2].name': '鐜瘎瀹℃壒鏂囧彿',
+          'msg[2].show': false,
+        })
+        break;
+      case '7':
+        this.setData({
+          'msg[2].name': '鐜瘎瀹℃壒鏂囧彿'
+        })
+        break;
+      default:
+        this.setData({
+          'msg[2].name': '鐜瘎瀹℃壒鏂囧彿'
+        })
+        break;
+    }
+    this.setData({
+      sceneType: this.data.sceneTypeMap[st]
+    })
+    this.getUserBaseInfo()
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow: function () {
+
+  },
+
+  changeMsg(e) {
+    let id = e.detail.params.id
+    let value = e.detail.params.value
+    let msg = this.data.msg
+    let msgLength = msg.length
+    for (let i = 0; i < msgLength; i++) {
+      if (msg[i].id === id) {
+        let path = "msg[" + i + "].value"
+        let nPath = "msg[" + i + "].noValue"
+        this.setData({
+          [path]: value,
+          [nPath]: false
+        })
+      }
+    }
+  },
+
+  checkboxChange(e) {
+    console.log('checkbox鍙戠敓change浜嬩欢锛屾惡甯alue鍊间负锛�', e.detail.value)
+
+    const items = this.data.commitTypes
+    const values = e.detail.value
+    for (let i = 0, lenI = items.length; i < lenI; ++i) {
+      items[i].checked = false
+
+      for (let j = 0, lenJ = values.length; j < lenJ; ++j) {
+        if (items[i].value === values[j]) {
+          items[i].checked = true
+          break
+        }
+      }
+    }
+
+    this.setData({
+      commitTypes: items
+    })
+    // console.log(this.data.commitTypes);
+  },
+
+  getUserBaseInfo() {
+    var that = this
+    userservice.getBaseInfo(app.globalData.accessToken.userId, {
+      success(data) {
+        const msg = that.data.msg
+        if (data.company) {
+          msg[0].value = data.company.ciName
+          msg[1].value = data.company.ciOrgCode
+          msg[3].value = data.company.ciJuridicalPerson
+        }
+        that.setData({
+          msg
+        })
+      }
+    }, app.globalData.accessToken.openId)
+  },
+
+  onSubmit: function () {
+    if (!this.submitCheck()) return
+
+    var _data = this.data
+    wx.navigateTo({
+      url: '/pages/mPromise/promisefile/promisefile',
+      success: function (res) {
+        // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+        res.eventChannel.emit('acceptDataFromOpenerPage', {
+          city: '',
+          district: '',
+          department: _data.msg[0].value,
+          socialCode: _data.msg[1].value,
+          number: _data.msg[2].value,
+          juridicalPerson: _data.msg[3].value,
+          idNo: _data.msg[4].value,
+          type1: _data.commitTypes[0].checked,
+          type2: _data.commitTypes[1].checked,
+          type3: _data.commitTypes[2].checked,
+          type4: _data.commitTypes[3].checked,
+          year: '',
+          month: '',
+          day: ''
+        })
+      }
+    })
+  },
+
+  /**
+   * 淇℃伅瀹屾暣搴︽鏌�
+   */
+  submitCheck() {
+    let msg = this.data.msg
+    let msgLength = msg.length
+    //纭淇℃伅瀹屾暣搴�
+    for (let i = 0; i < msgLength; i++) {
+      if (msg[i].required != false && msg[i].value === "") {
+        let error = msg[i].name + "涓嶅彲涓虹┖"
+        let path = "msg[" + i + "].noValue"
+        this.setData({
+          errorMsg: error,
+          [path]: true
+        })
+
+        wx.pageScrollTo({
+          duration: 300,
+          scrollTop: 0,
+          // selector:"#" + msg[i].id,
+        })
+        return false
+      }
+
+      //韬唤璇佷綅鏁板垽鏂�
+      if (i == 4) {
+        if (msg[i].value.length < msg[i].maxLength) {
+          let error = msg[i].name + "浣嶆暟閿欒"
+          let path = "msg[" + i + "].noValue"
+          this.setData({
+            errorMsg: error,
+            [path]: true
+          })
+
+          return false
+        }
+      }
+    }
+
+    var cList = []
+    for (let i = 0; i < this.data.commitTypes.length; i++) {
+      const t = this.data.commitTypes[i];
+      if (t.checked) {
+        cList.push(t)
+      }
+    }
+    if (cList.length == 0) {
+      this.setData({
+        errorMsg: '鑷冲皯閫夋嫨涓�椤规壙璇虹被鍨�',
+      })
+      return false
+    }
+
+    return true
+  }
+})
\ No newline at end of file
diff --git a/pages/mPromise/promiseinfo/promiseinfo.json b/pages/mPromise/promiseinfo/promiseinfo.json
new file mode 100644
index 0000000..726e6ed
--- /dev/null
+++ b/pages/mPromise/promiseinfo/promiseinfo.json
@@ -0,0 +1,11 @@
+{
+  "usingComponents": {
+    "mp-cells":"/component/cells/cells",
+    "mp-cell":"/component/cell/cell",
+    "input-cell":"/component/inputcell/inputcell",
+    "mp-toptips":"/component/toptips/toptips"
+  },
+  "navigationBarTitleText": "瀹堟硶鎵胯",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white"
+}
\ No newline at end of file
diff --git a/pages/mPromise/promiseinfo/promiseinfo.wxml b/pages/mPromise/promiseinfo/promiseinfo.wxml
new file mode 100644
index 0000000..f5391ea
--- /dev/null
+++ b/pages/mPromise/promiseinfo/promiseinfo.wxml
@@ -0,0 +1,34 @@
+<!--pages/promiseinfo/promiseinfo.wxml-->
+<view class="page">
+  <mp-toptips type="error" msg="{{errorMsg}}" show="{{errorMsg}}" delay="2000"></mp-toptips>
+  
+  <view class="banner-bg"></view>
+  <view class="page__bd">
+    <view class="fyui-panel">
+      <view class="flex-h">
+        <view>浼佷笟绫诲瀷</view>
+        <view class="content">{{sceneType}}</view>
+      </view>
+      <mp-cells>
+        <input-cell wx:for="{{msg}}" wx:key="id" item="{{item}}" bindpassValue="changeMsg"></input-cell>
+      </mp-cells>
+
+      <!-- <view class="flex-h">
+        <view>浼佷笟鎵胯绫诲瀷</view>
+      </view>
+      <view class="last">
+        <checkbox-group bindchange="checkboxChange">
+          <label wx:for="{{commitTypes}}" wx:key="value" class="weui-cell weui-check__label">
+            <view class="weui-cell__hd">
+              <checkbox value="{{item.value}}" checked="{{item.checked}}"></checkbox>
+            </view>
+            <view class="weui-cell__bd">{{item.name}}</view>
+          </label>
+        </checkbox-group>
+      </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/mPromise/promiseinfo/promiseinfo.wxss b/pages/mPromise/promiseinfo/promiseinfo.wxss
new file mode 100644
index 0000000..03ddef0
--- /dev/null
+++ b/pages/mPromise/promiseinfo/promiseinfo.wxss
@@ -0,0 +1,68 @@
+/* pages/promiseinfo/promiseinfo.wxss */
+.page__bd {
+  font-size: 16px;
+}
+.banner-bg {
+  position: fixed;
+  width: 100%;
+  height: 5vh;
+  background-color: #57E4CB;
+}
+
+.fyui-panel {
+  padding: 8px;
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+}
+
+.fyui-panel .flex-h {
+  margin: 10px 0;
+}
+
+.fyui-panel .first {
+  border-top: 1px rgba(214, 214, 214, 0.308) solid;
+}
+
+.fyui-panel .last {
+  border-bottom: 0px rgba(214, 214, 214, 0.308) solid;
+}
+
+.submit {
+  border-radius: 4px;
+  background: linear-gradient(to right, #6DF1A9, #62EBCF);
+  margin: 8px;
+  color: white;
+  padding: 8px;
+}
+.content {
+  padding-right: 14px;
+  color: var(--fyui-text-color_2);
+}
+/* .content:after {
+  content: " ";
+  width: 12px;
+  height: 24px;
+  -webkit-mask-position: 0 0;
+  mask-position: 0 0;
+  -webkit-mask-repeat: no-repeat;
+  mask-repeat: no-repeat;
+  -webkit-mask-size: 100%;
+  mask-size: 100%;
+  background-color: currentColor;
+  color: var(--fyui-text-color_2);
+  -webkit-mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
+  mask-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E);
+  position: absolute;
+  top: 50%;
+  right: 0px;
+  margin-top: -12px
+} */
+
+.check-item {
+  display: flex;
+}
+
+.weui-cell {
+  padding: 10px 16px;
+}
\ No newline at end of file
diff --git a/pages/mPromise/promiseresult/promiseresult.js b/pages/mPromise/promiseresult/promiseresult.js
new file mode 100644
index 0000000..567fb32
--- /dev/null
+++ b/pages/mPromise/promiseresult/promiseresult.js
@@ -0,0 +1,44 @@
+// pages/promiseresult/promiseresult.js
+const $f = require("../../../service/baserequest")
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    promise: {
+      picPath: [],
+      pdfPath: '',
+    }
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad: function (options) {
+    var that = this
+    this.getOpenerEventChannel().on('acceptDataFromOpenerPage', function (data) {
+      console.log(data);
+      // data.promise.picPath = $f.basePicUrl + data.promise.picPath
+      // data.promise.pdfPath = $f.basePicUrl + data.promise.pdfPath
+      that.setData({
+        promise: data.promise
+      })
+    })
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload: function () {
+    var pages = getCurrentPages()
+    var d = pages.length - 1
+    wx.navigateBack({
+      delta: d,
+      success: (res) => {},
+      fail: (res) => {},
+      complete: (res) => {},
+    })
+  },
+})
\ No newline at end of file
diff --git a/pages/mPromise/promiseresult/promiseresult.json b/pages/mPromise/promiseresult/promiseresult.json
new file mode 100644
index 0000000..5b9bcfc
--- /dev/null
+++ b/pages/mPromise/promiseresult/promiseresult.json
@@ -0,0 +1,6 @@
+{
+  "navigationBarTitleText": "鎵胯涔�",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mPromise/promiseresult/promiseresult.wxml b/pages/mPromise/promiseresult/promiseresult.wxml
new file mode 100644
index 0000000..7da1965
--- /dev/null
+++ b/pages/mPromise/promiseresult/promiseresult.wxml
@@ -0,0 +1,5 @@
+<!--pages/promiseresult/promiseresult.wxml-->
+<view class="">
+<image wx:for="{{promise.picPath}}" src="{{item}}" class="image" 	show-menu-by-longpress="true" mode="widthFix"></image>
+<!-- <image src="https://fyami.com.cn:447/images/commitment-restaurant-1659927781518.jpg" class="image" 	show-menu-by-longpress="true" mode="widthFix"></image> -->
+</view>
diff --git a/pages/mPromise/promiseresult/promiseresult.wxss b/pages/mPromise/promiseresult/promiseresult.wxss
new file mode 100644
index 0000000..22c1d30
--- /dev/null
+++ b/pages/mPromise/promiseresult/promiseresult.wxss
@@ -0,0 +1,5 @@
+/* pages/promiseresult/promiseresult.wxss */
+image {
+  width: 100%;
+  height: 100vh;
+}
\ No newline at end of file
diff --git a/pages/mPromise/promisesign/promisesign.js b/pages/mPromise/promisesign/promisesign.js
new file mode 100644
index 0000000..17c7c09
--- /dev/null
+++ b/pages/mPromise/promisesign/promisesign.js
@@ -0,0 +1,205 @@
+// pages/promisesign/promisesign.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    isDrawed: false,
+
+    width: '1px',
+    height: '1px'
+  },
+
+  //鍐冲畾鏄惁缁樺埗鐨勬渶灏忓儚绱犺窛绂�
+  TOUCH_TOLERANCE: 4,
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad: function (options) {
+    
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady: function () {
+    this.init()
+  },
+
+  init: function () {
+    wx.createSelectorQuery().in(this)
+      .select('.sign-canvas')
+      .fields({
+        node: true,
+        size: true
+      })
+      .exec((res) => {
+        //Canvas 瀵硅薄
+        const canvas = res[0].node
+        //娓叉煋涓婁笅鏂�
+        const ctx = canvas.getContext('2d')
+
+        //Canvas鐢诲竷鐨勫疄闄呯粯鍒堕珮搴�
+        this.width = res[0].width
+        this.height = res[0].height
+
+        //鍒濆鍖栫敾甯冨ぇ灏�
+        const dpr = wx.getWindowInfo().pixelRatio
+        canvas.width = this.width * dpr
+        canvas.height = this.height * dpr
+        ctx.scale(dpr, dpr)
+
+        this.canvas = canvas
+        this.ctx = ctx
+      })
+  },
+  touchStart(e) {
+    if (this.canvas && e.touches.length > 0) {
+      var t = e.touches[0];
+      this.ctx.moveTo(t.x, t.y)
+      this.tempX = t.x
+      this.tempY = t.y
+    }
+  },
+  touchMove(e) {
+    if (this.canvas && e.touches.length > 0) {
+      var t = e.touches[0];
+      var dx = Math.abs(t.x - this.tempX)
+      var dy = Math.abs(t.y - this.tempY)
+      if (dx >= this.TOUCH_TOLERANCE || dy >= this.TOUCH_TOLERANCE) {
+        this.ctx.lineTo(t.x, t.y)
+        this.ctx.stroke()
+        this.tempX = t.x
+        this.tempY = t.y
+      }
+    }
+  },
+  touchEnd(e) {
+    if (this.canvas && e.touches.length > 0) {
+      var t = e.touches[0];
+      this.ctx.lineTo(t.x, t.y)
+      this.ctx.stroke()
+    }
+    this.setData({
+      isDrawed: true
+    })
+  },
+
+  onCancel() {
+    wx.navigateBack({
+      success: (res) => {},
+      fail: (res) => {},
+      complete: (res) => {},
+    })
+  },
+  onSubmit() {
+    if (!this.data.isDrawed) {
+      wx.showToast({
+        title: '璇峰厛鍦ㄧ鍚嶅尯鍩熺鍚�',
+        duration: 2000,
+        icon: 'none',
+        mask: true,
+      })
+      return
+    }
+    wx.showLoading({
+      title: '绛惧悕鍥剧墖澶勭悊涓�',
+      mask: true,
+      success: (res) => {},
+      fail: (res) => {},
+      complete: (res) => {},
+    })
+    setTimeout(() => {
+      wx.hideLoading()
+    }, 10000);
+    var that = this
+    this.rotate(function (rotateCanvas){
+      wx.canvasToTempFilePath({
+        canvas: rotateCanvas,
+        success(res) {
+          let imgPath = res.tempFilePath
+          wx.setStorage({
+            data: imgPath,
+            key: 'signPath',
+            success(){
+              console.log('sign-success:' + imgPath);
+              wx.hideLoading({
+                success: (res) => {
+                  wx.showToast({
+                    title: '绛惧悕鐢熸垚鎴愬姛',
+                    duration: 1500,
+                    icon: 'success',
+                  })
+                  that.getOpenerEventChannel().emit('onSignSuccess', imgPath)
+                  wx.navigateBack()
+                },
+              })
+            }
+          })
+        },
+        fail(err) {
+          console.log(err)
+          wx.hideLoading({
+            success: (res) => {
+              wx.showToast({
+                title: '绛惧悕鍥剧墖瀵煎嚭寮傚父锛岃閲嶈瘯',
+                duration: 1500,
+                icon: 'error',
+              })
+            },
+          })
+        },
+      })
+    })
+  },
+  //鏃嬭浆鍥剧墖锛岀敓鎴愭柊canvas瀹炰緥
+  rotate(cb) {
+    const that = this;
+    wx.createSelectorQuery().select('#handWriting2')
+      .fields({
+        node: true,
+        size: true
+      })
+      .exec((res) => {
+        const rotateCanvas = res[0].node;
+        const rotateCtx = rotateCanvas.getContext('2d');
+        //this.ctxW-->鎵�缁樺埗canvas鐨剋idth
+        //this.ctxH -->鎵�缁樺埗canvas鐨刪eight
+        rotateCanvas.width = that.canvas.height;
+        rotateCanvas.height = that.canvas.width;
+        that.setData({
+          width: rotateCanvas.width,
+          height: rotateCanvas.height,
+        })
+        wx.canvasToTempFilePath({
+          canvas: that.canvas,
+          success(res) {
+            that.tempFilePath = res.tempFilePath;
+            const img = rotateCanvas.createImage();
+            img.src = res.tempFilePath;
+            img.onload = function () {
+              rotateCtx.translate(rotateCanvas.width / 2, rotateCanvas.height / 2);
+              rotateCtx.rotate(270 * Math.PI / 180);
+              rotateCtx.drawImage(img, -rotateCanvas.height / 2, -rotateCanvas.width / 2);
+              // rotateCtx.scale(that.pixelRatio, that.pixelRatio);
+              cb(rotateCanvas);
+            };
+          },
+          fail(err) {
+            console.log(err)
+            wx.hideLoading({
+              success: (res) => {
+                wx.showToast({
+                  title: '绛惧悕鍥剧墖澶勭悊寮傚父锛岃閲嶈瘯',
+                  duration: 1500,
+                  icon: 'error',
+                })
+              },
+            })
+          }
+        })
+      })
+  }
+})
\ No newline at end of file
diff --git a/pages/mPromise/promisesign/promisesign.json b/pages/mPromise/promisesign/promisesign.json
new file mode 100644
index 0000000..7a92666
--- /dev/null
+++ b/pages/mPromise/promisesign/promisesign.json
@@ -0,0 +1,6 @@
+{
+  "usingComponents": {},
+  "navigationBarTitleText": "绛惧悕",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white"
+}
\ No newline at end of file
diff --git a/pages/mPromise/promisesign/promisesign.wxml b/pages/mPromise/promisesign/promisesign.wxml
new file mode 100644
index 0000000..4363b53
--- /dev/null
+++ b/pages/mPromise/promisesign/promisesign.wxml
@@ -0,0 +1,13 @@
+<!--pages/test2/test2.wxml-->
+<view class="page">
+        <view class="canvas">
+                <canvas id="signCanvas" type="2d" class="sign-canvas" bindtouchstart="touchStart"
+                        bindtouchmove="touchMove" bindtouchend="touchEnd" disable-scroll="true"></canvas>
+                <view class="tips">璇锋棆杞睆骞曡嚦姝ゆ柟鍚戠鍚�</view>
+        </view>
+        <view class="btn-group">
+                <view class="cancel" bindtap="onCancel">鍙栨秷</view>
+                <view class="submit" bindtap="onSubmit">纭</view>
+        </view>
+        <canvas id="handWriting2" type="2d" style="position: absolute; z-index: -1; width:{{width}};height:{{height}};"></canvas>
+</view>
\ No newline at end of file
diff --git a/pages/mPromise/promisesign/promisesign.wxss b/pages/mPromise/promisesign/promisesign.wxss
new file mode 100644
index 0000000..f2b5db8
--- /dev/null
+++ b/pages/mPromise/promisesign/promisesign.wxss
@@ -0,0 +1,53 @@
+/* pages/test2/test2.wxss */
+.page {
+  overflow: hidden;
+}
+
+.canvas {
+  display: flex;
+  margin-top: 4px;
+}
+
+.sign-canvas {
+  border: 1px solid;
+  width: 80%;
+  height: 80vh;
+  margin: auto;
+}
+
+
+
+.submit {
+  border-radius: 4px;
+  background: linear-gradient(to right, #6DF1A9, #62EBCF);
+  margin: 8px;
+  color: white;
+  padding: 8px;
+  text-align: center;
+  flex: 1;
+}
+
+.cancel {
+  border-radius: 4px;
+  background-color: rgb(189, 188, 188);
+  margin: 8px;
+  color: white;
+  padding: 8px;
+  text-align: center;
+  flex: 1;
+}
+
+.tips {
+  /* background-color: cornsilk; */
+  transform: rotateZ(90deg);
+  width: 40px;
+  font-size: 16px;
+  height: 22px;
+  margin-top: 180px;
+  white-space: nowrap;
+}
+
+.btn-group {
+  display: flex;
+
+}
\ No newline at end of file
diff --git a/pages/mService/behaviors/bScheduleManager.js b/pages/mService/behaviors/bScheduleManager.js
new file mode 100644
index 0000000..e19eeb9
--- /dev/null
+++ b/pages/mService/behaviors/bScheduleManager.js
@@ -0,0 +1,136 @@
+import scheduleservice from '../../../service/scheduleservice'
+import sysSchedules from '../../../data/schedules'
+import moment from '../../../utils/moment.min'
+import util from '../../../utils/util'
+
+const app = getApp()
+
+/**
+ * 鐜繚鏃ョ▼绠$悊
+ */
+module.exports = Behavior({
+  // behaviors: [bLoadingStatus],
+  properties: {
+    ledgerCompleted: {
+      type: Boolean,
+      observer(value) {
+        this.checkScheduleComplete(0, value)
+      }
+    },
+    assessmentCompleted: {
+      type: Boolean,
+      observer(value) {
+        this.checkScheduleComplete(1, value)
+      }
+    }
+  },
+  data: {
+    allSchedules: [],
+    thisSchedule: {},
+    index: 0
+  },
+  lifetimes: {
+    attached: function () {
+      this.getRecentSchedule()
+      if (app.globalData.newUser) {
+        this.nextSchedules()
+      }
+      // this.getAllSchedules()
+    }
+  },
+  methods: {
+    //鏌ユ壘鏈�涓磋繎鐨勬棩绋�
+    getRecentSchedule() {
+      //1. 浠庢帴鍙h幏鍙栫敤鎴蜂釜浜恒�佺敤鎴蜂紒涓氱被鍨嬬殑鐩稿叧鏈�涓磋繎鏃ョ▼
+      //2. 鎸夌収鏈湴閫昏緫锛屽緱鍑烘渶閭昏繎鏃ョ▼
+      const schedules = sysSchedules()
+      //2.1 灏嗗彴璐︺�佽瘎浼般�佹壙璇轰笁椤笰PP鍔熻兘瀹氫箟涓烘棩绋�
+      //2.2 閫夋嫨鏈�閭昏繎鐨勪簨椤逛綔涓哄綋鏃ョ殑鎻愰啋浜嬮」, 
+      let today = moment().hour(0).minute(0).second(0).millisecond(0)
+      let diffDays = 999
+      let schedule
+      let index = 0
+      for (let i = 0; i < schedules.length; i++) {
+        let s = schedules[i];
+        let d = s.time.diff(today, 'days')
+        s.diffDays = d
+        if (Math.abs(d) < Math.abs(diffDays)) {
+          let _index = i
+
+          schedule = s
+          diffDays = d
+          index = _index
+        }
+      }
+      //2.3 鏃ョ▼鍦ㄦ椂闂寸淮搴︿笂鍒嗕负涓夌被鎻愰啋锛岄鍛娿�佸綋鏃ャ�佹湭瀹屾垚鐨勯�炬湡鎻愰啋
+
+
+      this.setData({
+        allSchedules: schedules,
+        thisSchedule: {
+          date: schedule.time,
+          time: schedule.time.format('YYYY-MM-DD dddd'),
+          type: schedule.type,
+          events: schedule.events,
+          diffDays: schedule.diffDays,
+        },
+        index
+      })
+    },
+
+    //鑾峰彇鎵�鏈夋棩绋�
+    getAllSchedules() {
+      console.log('getAllSchedules');
+      scheduleservice.getAllSchedules(app.globalData.accessToken.userId, {
+        success(res) {
+          console.log('success');
+          console.log(res);
+        },
+        fail(e) {
+          console.log('fail');
+          console.log(e);
+        },
+        complete(res) {
+          console.log('complete');
+        },
+      })
+    },
+
+    // 褰撳墠鏃ョ▼瀹屾垚锛岄『寤朵笅涓�涓棩绋�
+    nextSchedules() {
+      let today = moment().hour(0).minute(0).second(0).millisecond(0)
+      let s = this.data.allSchedules[this.data.index + 1];
+      let d = s.time.diff(today, 'days')
+      s.diffDays = d
+
+      this.setData({
+        thisSchedule: {
+          date: s.time,
+          time: s.time.format('YYYY-MM-DD dddd'),
+          type: s.type,
+          events: s.events,
+          diffDays: s.diffDays,
+        },
+        index: this.data.index + 1
+      })
+    },
+
+    // 妫�鏌ュ綋鍓嶆棩绋嬫槸鍚﹀畬鎴�
+    checkScheduleComplete(type, value) {
+      debugger
+      // 鏂扮敤鎴蜂笉鍋氬垽鏂�
+      if (app.globalData.newUser) return
+      // 鏃ョ▼绫诲瀷涓嶄竴鑷存棤闇�鍒ゆ柇
+      if (this.data.thisSchedule.type != type) return
+      // 鏃ョ▼涓嶅湪褰撴湀鐨勬棤闇�鍒ゆ柇
+      const thisMonth = moment().month()
+      const sTimeMonth = moment(this.data.thisSchedule.date).month()
+      if (thisMonth != sTimeMonth) return
+
+      // 鏃ョ▼瀹屾垚鍒欓『寤朵笅涓棩绋�
+      if (value) {
+        this.nextSchedules()
+      }
+    }
+  }
+})
\ No newline at end of file
diff --git a/pages/mService/cSchedule/cSchedule.js b/pages/mService/cSchedule/cSchedule.js
new file mode 100644
index 0000000..f4996ff
--- /dev/null
+++ b/pages/mService/cSchedule/cSchedule.js
@@ -0,0 +1,38 @@
+// pages/mService/cSchedule/cSchedule.js
+import moment from '../../../utils/moment.min'
+import bScheduleManager from '../behaviors/bScheduleManager'
+
+Component({
+  behaviors: [bScheduleManager],
+  options: {
+    addGlobalClass: true
+  },
+  /**
+   * 缁勪欢鐨勫睘鎬у垪琛�
+   */
+  properties: {
+    
+  },
+
+  /**
+   * 缁勪欢鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 缁勪欢鐨勬柟娉曞垪琛�
+   */
+  methods: {
+    goto() {
+      var that = this
+      wx.navigateTo({
+        url: '/pages/mService/pScheduledetail/pScheduledetail',
+        success: (res) => {
+          res.eventChannel.emit('acceptDataFromOpenerPage', that.data.thisSchedule)
+        },
+      })
+    }
+  }
+})
\ No newline at end of file
diff --git a/pages/mService/cSchedule/cSchedule.json b/pages/mService/cSchedule/cSchedule.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/pages/mService/cSchedule/cSchedule.json
@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mService/cSchedule/cSchedule.wxml b/pages/mService/cSchedule/cSchedule.wxml
new file mode 100644
index 0000000..c65d216
--- /dev/null
+++ b/pages/mService/cSchedule/cSchedule.wxml
@@ -0,0 +1,16 @@
+<!--pages/mService/cSchedule/cSchedule.wxml-->
+<view class="schedule-card {{thisSchedule.diffDays > 0 ? 'schedule-card__2' : (thisSchedule.diffDays < 0 ? 'schedule-card__3' : '')}}" bindtap="goto">
+  <view class="schedule-tag">{{thisSchedule.diffDays > 0 ? 'FUTURE' : (thisSchedule.diffDays == 0 ? 'TODAY' : 'PAST')}}</view>
+  <view class="schedule-category">
+    <image class="image-16" src="/res/icons/schedule_1.png"></image>
+    <!-- <text>{{thisSchedule.events[0].type == 1 ? '绯荤粺鏃ョ▼' : '鐜繚鏃ョ▼'}}</text> -->
+    <text>鐜繚宸ヤ綔鏃ョ▼</text>
+  </view>
+  <view class="schedule-title">{{thisSchedule.events[0].name}}</view>
+  <view class="schedule-time">
+    <text>{{thisSchedule.time}}</text>
+    <text wx:if="{{thisSchedule.diffDays < 0}}">杩囧幓{{-thisSchedule.diffDays}}澶�</text>
+    <text wx:elif="{{thisSchedule.diffDays == 0}}">浠婂ぉ</text>
+    <text wx:else>杩樻湁{{thisSchedule.diffDays}}澶�</text>
+  </view>
+</view>
diff --git a/pages/mService/cSchedule/cSchedule.wxss b/pages/mService/cSchedule/cSchedule.wxss
new file mode 100644
index 0000000..95a6a95
--- /dev/null
+++ b/pages/mService/cSchedule/cSchedule.wxss
@@ -0,0 +1,51 @@
+/* pages/mService/cSchedule/cSchedule.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-card__3 {
+  background: linear-gradient(0deg, #e97f7f, #f86b6b, #ff3838);
+}
+
+.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/mService/pDevicedata/pDevicedata.js b/pages/mService/pDevicedata/pDevicedata.js
new file mode 100644
index 0000000..04500de
--- /dev/null
+++ b/pages/mService/pDevicedata/pDevicedata.js
@@ -0,0 +1,269 @@
+// pages/mService/pDevicedata/pDevicedata.js
+import moment from '../../../utils/moment.min'
+import bLoadingStatus from '../../../base/behaviors/bLoadingStatus'
+import bLoadingToast from '../../../base/behaviors/bLoadingToast'
+
+const echarts = require("../../../component/ec-canvas/echarts")
+const deviceservice = require('../../../service/deviceservice')
+const app = getApp()
+
+function setOption(chart, data) {
+  var option = {
+    // title: {
+    //   text: data.total, //涓绘爣棰樻枃鏈�
+    //   subtext: '娉ㄥ唽浼佷笟', //鍓爣棰樻枃鏈�
+    // },
+    textStyle: {
+      color: 'white'
+    },
+    color: ['white'],
+    grid: {
+      containLabel: true
+    },
+    tooltip: {
+      show: true,
+      trigger: 'axis'
+    },
+    xAxis: {
+      name: '鏃堕棿',
+      nameLocation: 'end',
+      type: 'time',
+      boundaryGap: false,
+      nameRotate: 90,
+      nameTextStyle: {
+        fontSize: 10,
+      },
+      axisLabel: {
+        rotate: 45
+      }
+    },
+    yAxis: {
+      name: '娴撳害\n(mg/m鲁)',
+      nameLocation: 'end',
+      position: 'left',
+      type: 'value',
+      splitLine: {
+        lineStyle: {
+          type: 'dashed'
+        }
+      },
+      // show: false
+    },
+    grid: {
+      x: 38,
+      y: 40,
+      x2: 30,
+      y2: 60
+    },
+
+    series: [{
+      name: '娴撳害',
+      type: 'line',
+      smooth: true,
+      areaStyle: {
+        color: {
+          type: 'linear',
+          x: 0.5,
+          y: 0,
+          x2: 0.5,
+          y2: 1,
+          colorStops: [{
+            offset: 0,
+            color: '#28db74' // 0% 澶勭殑棰滆壊
+          }, {
+            offset: 1,
+            color: '#dcfeea79' // 100% 澶勭殑棰滆壊
+          }],
+          opacity: 0.1,
+          global: false // 缂虹渷涓� false
+        }
+      },
+      data: data,
+    }]
+  };
+
+  chart.setOption(option);
+}
+
+Page({
+  behaviors: [bLoadingStatus, bLoadingToast],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    ec: {
+      lazyLoad: true
+    },
+    //鏌ヨ鏃ユ湡
+    selectDate: '',
+    endDay: '',
+    //鏌ヨ鏃堕棿
+    startTime: '',
+    endTime: '',
+    //鐩戞祴鏁版嵁
+    dataList: [{
+      time: '----',
+      value: '--'
+    }, ],
+    //鎺掑彛浣嶇疆
+    outfallLocation: undefined,
+    //鎺掑彛鎵�灞�
+    outfallOwner: undefined
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+    this.ecComponent = this.selectComponent('#mychart-dom-line');
+    this.initChart()
+  },
+
+  initParams() {
+    const now = moment()
+    const eD = now.format("YYYY-MM-DD")
+    this.setData({
+      selectDate: eD,
+      endDay: eD,
+      startTime: '00:00',
+      endTime: '23:59'
+    })
+  },
+
+  initChart: function () {
+    var data = []
+    this.ecComponent.init((canvas, width, height, dpr) => {
+      // 鑾峰彇缁勪欢鐨� canvas銆亀idth銆乭eight 鍚庣殑鍥炶皟鍑芥暟
+      // 鍦ㄨ繖閲屽垵濮嬪寲鍥捐〃
+      const chart = echarts.init(canvas, null, {
+        width: width,
+        height: height,
+        devicePixelRatio: dpr // new
+      });
+      canvas.setChart(chart);
+      setOption(chart, data);
+
+      // 灏嗗浘琛ㄥ疄渚嬬粦瀹氬埌 this 涓婏紝鍙互鍦ㄥ叾浠栨垚鍛樺嚱鏁帮紙濡� dispose锛変腑璁块棶
+      this.chart = chart;
+      this.getDeviceData()
+      this.initParams()
+
+      // 娉ㄦ剰杩欓噷涓�瀹氳杩斿洖 chart 瀹炰緥锛屽惁鍒欎細褰卞搷浜嬩欢澶勭悊绛�
+      return chart;
+    });
+  },
+
+  getDeviceData() {
+    this.setData({
+      loading: true
+    })
+
+    var that = this
+    const {
+      selectDate,
+      startTime,
+      endTime
+    } = this.data
+    let sT = ''
+    let eT = ''
+    if (selectDate != '') {
+      sT = selectDate + ' ' + startTime
+      eT = selectDate + ' ' + endTime
+    }
+    const cb = {
+      success(data) {
+        that.setData({
+          dataList: data.reverse()
+        })
+        that.parseChart(data)
+      },
+      fail(err) {
+        that.setData({
+          dataList: []
+        })
+      },
+      complete() {
+        that.setData({
+          loading: false
+        })
+      }
+    }
+    const sceneType = app.globalData.userInfo.extension2
+    switch (sceneType) {
+      case '1':
+        deviceservice.getJingAnFumeVakue(app.globalData.accessToken.userId, sT, eT, cb)
+        break;
+      // case '2':
+      //   break;
+      // case '3':
+      //   break;
+      // case '4':
+      //   break;
+      // case '5':
+      //   break;
+      // case '6':
+      //   break;
+      // case '7':
+      //   break;
+      default:
+        this.setData({
+          dataList: [],
+          loading: false
+        })
+        break;
+    }
+  },
+
+  parseChart(dataList) {
+    const xValues = []
+    dataList.forEach(d => {
+      let t = d.time.replace(' ', 'T')
+      t = t + ':00.000'
+      xValues.push([t, d.value])
+    });
+    setOption(this.chart, xValues)
+
+    // setOption(this.chart, [
+    //   ['2022-11-28T10:05:00.000', 0.02],
+    //   ['2022-11-28T10:10:00.000', 0.04],
+    //   ['2022-11-28T10:15:00.000', 0.02],
+    //   ['2022-11-28T10:20:00.000', 0.02],
+    //   ['2022-11-28T10:25:00.000', 0.01],
+    //   ['2022-11-28T10:30:00.000', 0.01],
+    //   ['2022-11-28T10:35:00.000', 0.01],
+    //   ['2022-11-28T10:40:00.000', 0.01],
+    //   ['2022-11-28T10:45:00.000', 0.02],
+    //   ['2022-11-28T10:50:00.000', 0.03],
+    //   ['2022-11-28T10:55:00.000', 0.08],
+    //   ['2022-11-28T11:00:00.000', 0.1],
+    // ])
+  },
+
+  bindDateChange(e) {
+    let d = e.detail.value
+    this.setData({
+      selectDate: d,
+    })
+  },
+
+  bindStartTimeChange(e) {
+    let d = e.detail.value
+    this.setData({
+      startTime: d,
+    })
+  },
+
+  bindEndTimeChange(e) {
+    let d = e.detail.value
+    this.setData({
+      endTime: d,
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/mService/pDevicedata/pDevicedata.json b/pages/mService/pDevicedata/pDevicedata.json
new file mode 100644
index 0000000..b7a984d
--- /dev/null
+++ b/pages/mService/pDevicedata/pDevicedata.json
@@ -0,0 +1,9 @@
+{
+  "navigationBarTitleText": "鐩戞祴鏁版嵁",
+  "navigationBarBackgroundColor": "#009e91",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {
+    "ec-canvas": "/component/ec-canvas/ec-canvas",
+    "mp-icon": "/component/icon/icon"
+  }
+}
\ No newline at end of file
diff --git a/pages/mService/pDevicedata/pDevicedata.wxml b/pages/mService/pDevicedata/pDevicedata.wxml
new file mode 100644
index 0000000..a27a7c8
--- /dev/null
+++ b/pages/mService/pDevicedata/pDevicedata.wxml
@@ -0,0 +1,64 @@
+<!--pages/mService/pDevicedata/pDevicedata.wxml-->
+<import src="/template/nodata.wxml"></import>
+
+<view class="page">
+  <view class="banner-bg"></view>
+  <view class="page__hd">
+    <view class="card" wx:if="{{outfallLocation}}">
+      <view class="flex-h">
+        <view>鎺掑彛绫诲瀷锛�</view>
+        <text>{{outfallLocation}}</text>
+      </view>
+      <view class="flex-h">
+        <view>鎺掑彛鎵�灞烇細</view>
+        <text>{{outfallOwner}}</text>
+      </view>
+    </view>
+    <view class="title">鏃堕棿閫夋嫨</view>
+    <view class="select-time">
+      <picker bindchange="bindDateChange" value="{{selectDate}}" mode="date" fields="day" end="{{endDay}}">
+        <view class="select-time-text">{{selectDate}}</view>
+      </picker>
+      <view style="margin-right: 4px;">-</view>
+      <picker bindchange="bindStartTimeChange" value="{{startTime}}" mode="time">
+        <view class="select-time-text">{{startTime}}</view>
+      </picker>
+      <view style="margin-right: 4px;">-</view>
+      <picker bindchange="bindEndTimeChange" value="{{endTime}}" mode="time">
+        <view class="select-time-text">{{endTime}}</view>
+      </picker>
+      <view bindtap="getDeviceData" class="search-btn">
+        <!-- <mp-icon icon="search" size="20" color="#009e91"></mp-icon> -->
+        <text>鏌ヨ</text>
+      </view>
+    </view>
+  </view>
+  <view class="page__bd">
+    <!-- 鎶樼嚎鍥� -->
+    <view class="title">鏁版嵁瓒嬪娍</view>
+    <view class="radar-panel">
+      <ec-canvas wx:if="{{dataList.length > 0}}" id="mychart-dom-line" canvas-id="mychart-line" ec="{{ ec }}"></ec-canvas>
+      <template wx:else is="nodataPage"></template>
+    </view>
+    <!-- 鏁版嵁琛� -->
+    <view class="title">鏁版嵁璇︽儏</view>
+    <view>
+      <view class="table-row table-row-first">
+        <text class="table-row__first-td" style="border-top-left-radius: 4px;">搴忓彿</text>
+        <text>鏃堕棿</text>
+        <text style="border-top-right-radius: 4px;">娴撳害(mg/m鲁)</text>
+      </view>
+      <block wx:if="{{dataList.length > 0}}">
+        <view wx:for="{{dataList}}" wx:key="index" class="table-row">
+          <text class="table-row__first-td">{{index + 1}}</text>
+          <text>{{item.time}}</text>
+          <text>{{item.value}}</text>
+        </view>
+      </block>
+      <template wx:else is="nodataPage"></template>
+    </view>
+  </view>
+  <view class="page__ft">
+
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mService/pDevicedata/pDevicedata.wxss b/pages/mService/pDevicedata/pDevicedata.wxss
new file mode 100644
index 0000000..01d1e52
--- /dev/null
+++ b/pages/mService/pDevicedata/pDevicedata.wxss
@@ -0,0 +1,109 @@
+/* pages/mService/pDevicedata/pDevicedata.wxss */
+.page__hd {
+  padding: 0;
+}
+
+.card {
+  margin: 0 12px;
+  padding: 4px;
+  border-radius: 4px;
+  color: rgba(255, 255, 255, 0.795);
+  font-size: 14px;
+  background-color: rgba(255, 255, 255, 0.13);
+}
+.flex-h>view {
+  white-space: nowrap;
+}
+.flex-h>text {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.banner-bg {
+  position: fixed;
+  width: 100%;
+  height: 100vh;
+  background: linear-gradient(#009e91, #00c4b3);
+}
+
+.radar-panel {
+  width: 100%;
+  height: 35vh;
+  color: white;
+}
+
+.title {
+  color: white;
+  margin-left: 16px;
+  margin-right: 16px;
+  font-size: 14px;
+  font-weight: 600;
+  margin-top: 8px;
+  margin-bottom: 4px;
+}
+
+.select-time {
+  color: white;
+  margin: 0 16px 0 16px;
+  font-size: 0.8rem;
+  font-weight: 600;
+  display: flex;
+  justify-content: space-between;
+}
+
+.select-time .select-time-text {
+  border-radius: 4px;
+  border: 1px solid white;
+  text-align: center;
+  padding: 2px 8px;
+  margin-right: 4px;
+}
+
+.table-row {
+  display: flex;
+  justify-content: space-between;
+  padding: 0 16px;
+  color: white;
+  font-size: 14px;
+}
+
+.table-row>text{
+  display: block;
+  width: 100%;
+  border: 1px solid white;
+  border-top: 0px;
+  border-left: 0px;
+  text-align: center;
+}
+
+.table-row .table-row__first-td {
+  width: 100px;
+  border-left: 1px solid white;
+}
+
+.table-row-first>text{
+  border: 1px solid white;
+  border-left: 0px;
+  font-weight: 600;
+  background-color: rgba(253, 253, 253, 0.158);
+}
+
+.more {
+  color: white;
+}
+
+.search-btn {
+  border-radius: 4px;
+  border: 1px solid white;
+  text-align: center;
+  padding: 2px 0;
+  color: #009e91;
+  flex: 1;
+  margin-left: 8px;
+  background-color: rgb(255, 255, 255);
+}
+
+.search-btn:active {
+  background-color: rgba(255, 255, 255, 0.534);
+}
\ No newline at end of file
diff --git a/pages/mService/pSchedule/pSchedule.js b/pages/mService/pSchedule/pSchedule.js
new file mode 100644
index 0000000..3f0b61a
--- /dev/null
+++ b/pages/mService/pSchedule/pSchedule.js
@@ -0,0 +1,77 @@
+// pages/mService/pSchedule/pSchedule.js
+import bScheduleManager from '../behaviors/bScheduleManager'
+const moment = require('../../../utils/moment.min')
+
+Page({
+  behaviors: [bScheduleManager],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    totals: 0,
+    schedules: [{
+      category: '2022骞�9鏈堢幆淇濆伐浣滄棩绋�',
+      details: [{
+        time: '9鏈�10鏃�',
+        name: '鐜繚鏃ョ▼',
+        left: 3,
+      }]
+    }]
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    // const now = moment().hour(0).minute(0).second(0).millisecond(0)
+    // const year = now.year()
+    const schedules = []
+    let totals = this.data.allSchedules.length
+
+    const map = new Map()
+    for (let i = 0; i < this.data.allSchedules.length; i++) {
+      const s = this.data.allSchedules[i];
+      s.events.forEach(e => {
+        if (!map.has(e.category)) {
+          map.set(e.category, [])
+        }
+        map.get(e.category).push({
+          time: s.time.format('MM鏈圖D鏃�'),
+          name: e.name,
+          left: s.diffDays,
+          s: s
+        })
+      });
+    }
+    for (let item of map) {
+      schedules.push({
+        category: item[0],
+        details: item[1]
+      })
+    }
+    this.setData({
+      schedules,
+      totals
+    })
+  },
+
+  goto(e) {
+    var that = this
+    const index = e.currentTarget.dataset.index
+    const s = that.data.schedules[index[0]].details[index[1]].s
+    const _s = {
+      time: s.time.format('YYYY-MM-DD dddd'),
+      events: s.events,
+      diffDays: s.diffDays,
+      steps: s.steps,
+      category: s.category
+    }
+    console.log(that.data.schedules);
+    wx.navigateTo({
+      url: '/pages/mService/pScheduledetail/pScheduledetail',
+      success: (res) => {
+        res.eventChannel.emit('acceptDataFromOpenerPage', _s)
+      },
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/mService/pSchedule/pSchedule.json b/pages/mService/pSchedule/pSchedule.json
new file mode 100644
index 0000000..a9227d7
--- /dev/null
+++ b/pages/mService/pSchedule/pSchedule.json
@@ -0,0 +1,5 @@
+{
+  "navigationBarTitleText": "鍏ㄩ儴鏃ョ▼",
+  "navigationBarBackgroundColor": "#EAFFF1",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mService/pSchedule/pSchedule.wxml b/pages/mService/pSchedule/pSchedule.wxml
new file mode 100644
index 0000000..ecb8aa0
--- /dev/null
+++ b/pages/mService/pSchedule/pSchedule.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="i" wx:for-index="i">
+      <view class="sm-title">{{item.category}}</view>
+      <view wx:for="{{item.details}}" wx:key="j" wx:for-index="j" wx:for-item="d" class="sm-card" data-index="{{[i, j]}}" bindtap="goto">
+        <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/mService/pSchedule/pSchedule.wxss b/pages/mService/pSchedule/pSchedule.wxss
new file mode 100644
index 0000000..867c7e7
--- /dev/null
+++ b/pages/mService/pSchedule/pSchedule.wxss
@@ -0,0 +1,104 @@
+/* pages/mService/pSchedule/pSchedule.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/mService/pScheduledetail/pScheduledetail.js b/pages/mService/pScheduledetail/pScheduledetail.js
new file mode 100644
index 0000000..9d0add6
--- /dev/null
+++ b/pages/mService/pScheduledetail/pScheduledetail.js
@@ -0,0 +1,40 @@
+// pages/mService/pScheduledetail/pScheduledetail.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    steps: [{
+      index: '01',
+      title: ['鍓嶅線鐜�', '淇濋儴闂�'],
+      content: '鍓嶅線鐩稿叧鐜繚閮ㄩ棬鎻愪緵鐩稿叧璇佷欢锛屽彲杩涜钀ヤ笟鎵х収缁湡銆�'
+    }, {
+      index: '02',
+      title: ['钀ヤ笟鎵�', '鐓х画鏈�'],
+      content: '鍓嶅線鐩稿叧鐜繚閮ㄩ棬鎻愪緵鐩稿叧璇佷欢锛屽彲杩涜钀ヤ笟鎵х収缁湡銆�'
+    }, {
+      index: '03',
+      title: ['钀ヤ笟鎵�', '鐓х画鏈�'],
+      content: '鍓嶅線鐩稿叧鐜繚閮ㄩ棬鎻愪緵鐩稿叧璇佷欢锛屽彲杩涜钀ヤ笟鎵х収缁湡銆�'
+    }]
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    this.getOpenerEventChannel().on('acceptDataFromOpenerPage', (data) => {
+      this.setData({
+        thisSchedule: data
+      })
+    })
+  },
+
+  onSubmit() {
+    wx.navigateTo({
+      url: '/pages/mService/pSchedule/pSchedule',
+      success: (result) => {},
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/mService/pScheduledetail/pScheduledetail.json b/pages/mService/pScheduledetail/pScheduledetail.json
new file mode 100644
index 0000000..d57ad74
--- /dev/null
+++ b/pages/mService/pScheduledetail/pScheduledetail.json
@@ -0,0 +1,5 @@
+{
+  "navigationBarTitleText": "鏃ョ▼璇︽儏",
+  "navigationBarBackgroundColor": "#EAFFF1",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mService/pScheduledetail/pScheduledetail.wxml b/pages/mService/pScheduledetail/pScheduledetail.wxml
new file mode 100644
index 0000000..455b33c
--- /dev/null
+++ b/pages/mService/pScheduledetail/pScheduledetail.wxml
@@ -0,0 +1,33 @@
+<!--pages/mService/pScheduledetail/pScheduledetail.wxml-->
+<view class="page">
+  <view class="page__hd">
+    <view class="sd-card">
+      <view class="sd-card__title">{{thisSchedule.time}}</view>
+      <view class="sd-card__content">{{thisSchedule.events[0].name}}</view>
+    </view>
+
+    <view class="sd-item">
+      <view>鏃ョ▼绫诲埆</view>
+      <view>{{thisSchedule.events[0].type == 1 ? '绯荤粺鏃ョ▼' : '鐜繚鏃ョ▼'}}</view>
+    </view>
+    <view class="sd-item">
+      <view>寮�濮嬫椂闂�</view>
+      <view class="sd-item__time">{{thisSchedule.time}}</view>
+    </view>
+    <view class="sd-item">
+      <view>缁撴潫鏃堕棿</view>
+      <view class="sd-item__time">{{thisSchedule.time}}</view>
+    </view>
+  </view>
+  <view class="page__bd">
+    <view class="sd-divider"> <text>* * *</text> 鏃ョ▼鎻愰啋 <text>* * *</text> </view>
+    <view class="sd-step" wx:for="{{thisSchedule.events[0].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/mService/pScheduledetail/pScheduledetail.wxss b/pages/mService/pScheduledetail/pScheduledetail.wxss
new file mode 100644
index 0000000..e9bc27a
--- /dev/null
+++ b/pages/mService/pScheduledetail/pScheduledetail.wxss
@@ -0,0 +1,81 @@
+/* pages/mService/pScheduledetail/pScheduledetail.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/mService/pServicehome/servicehome.js b/pages/mService/pServicehome/servicehome.js
new file mode 100644
index 0000000..c50b732
--- /dev/null
+++ b/pages/mService/pServicehome/servicehome.js
@@ -0,0 +1,66 @@
+// pages/mService/pServicehome/servicehome.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/m_user/userregistergov/userregistergov.json b/pages/mService/pServicehome/servicehome.json
similarity index 100%
copy from pages/m_user/userregistergov/userregistergov.json
copy to pages/mService/pServicehome/servicehome.json
diff --git a/pages/mService/pServicehome/servicehome.wxml b/pages/mService/pServicehome/servicehome.wxml
new file mode 100644
index 0000000..6fc26a6
--- /dev/null
+++ b/pages/mService/pServicehome/servicehome.wxml
@@ -0,0 +1,25 @@
+<!--pages/mService/pServicehome/servicehome.wxml-->
+<include src="/pages/home/home"/>
+<view class="page">
+  <view class="page__hd flex-h">
+    <view class="image-btn" bindtap="goto" data-index="2">
+      <image src="/res/icons/btn_bg_2.png" class="" />
+      <text class="image-btn_title">鏅鸿兘鍦ㄧ嚎鍜ㄨ</text>
+      <text class="image-btn_abstract">鍦ㄧ嚎鏅鸿兘鍜ㄨ鏈嶅姟</text>
+      <view class="image-btn_goto"></view>
+    </view>
+    <view class="image-btn" bindtap="goto" data-index="3">
+      <image src="/res/icons/btn_bg_1.png" class="" />
+      <text class="image-btn_title">鍦ㄧ嚎瀹堟硶瀛︿範</text>
+      <text class="image-btn_abstract">瀹炴椂鍦ㄧ嚎瀛︿範鏈嶅姟</text>
+      <view class="image-btn_goto"></view>
+    </view>
+  </view>
+  <view class="page__bd">
+    <view class="fyui-panel">
+      <view>涓撳睘娉曞姟鏈嶅姟</view>
+      <view></view>
+    </view>
+  </view>
+  <view class="page__ft"></view>
+</view>
\ No newline at end of file
diff --git a/pages/mService/pServicehome/servicehome.wxss b/pages/mService/pServicehome/servicehome.wxss
new file mode 100644
index 0000000..643592e
--- /dev/null
+++ b/pages/mService/pServicehome/servicehome.wxss
@@ -0,0 +1,39 @@
+/* pages/mService/pServicehome/servicehome.wxss */
+.image-btn {
+  position: relative;
+}
+
+.image-btn>image {
+  width: 46vw;
+  height: 90px;
+}
+
+.image-btn .image-btn_title {
+  position: absolute;
+  left: 8px;
+  top: 4px;
+  color: white;
+  font-size: 15px;
+}
+
+.image-btn .image-btn_abstract {
+  position: absolute;
+  left: 8px;
+  top: 28px;
+  color: white;
+  font-size: 10px;
+}
+
+.image-btn .image-btn_goto {
+  position: absolute;
+  left: 8px;
+  top: 48px;
+  width: 24px;
+  height: 24px;
+  background-color: white;
+  text-align: center;
+  border-radius: 50%;
+  background-repeat: no-repeat;
+  background-position: center;
+  background-image: url(data:image/svg+xml,%3Csvg%20width%3D%2212%22%20height%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M2.454%206.58l1.06-1.06%205.78%205.779a.996.996%200%20010%201.413l-5.78%205.779-1.06-1.061%205.425-5.425-5.425-5.424z%22%20fill%3D%22%23B2B2B2%22%20fill-rule%3D%22evenodd%22%2F%3E%3C%2Fsvg%3E)
+}
\ No newline at end of file
diff --git a/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.js b/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.js
new file mode 100644
index 0000000..a696abb
--- /dev/null
+++ b/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.js
@@ -0,0 +1,195 @@
+// pages/mUser/baseC/c_company-info/c_company-info.js
+import {companyLedger} from '../../../../data/sceneInfo'
+import userservice from '../../../../service/userservice'
+import authservice from '../../../../service/authservice'
+import ledgerservice from "../../../../service/ledgerservice"
+import bInputCheck from '../../../../base/behaviors/bInputCheck'
+import bUploadLedger from '../../../mLedger/behaviors/bUploadLedger'
+import bLoadingToast from '../../../../base/behaviors/bLoadingToast'
+
+const app = getApp()
+
+Component({
+  behaviors: [bInputCheck, bUploadLedger, bLoadingToast],
+  options: {
+    addGlobalClass: true,
+  },
+  /**
+   * 缁勪欢鐨勫睘鎬у垪琛�
+   */
+  properties: {
+    submitText: {
+      type: String,
+      value: '鎻愪氦'
+    },
+    sceneType: {
+      type: String,
+      value: '1'
+    },
+  },
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    sceneTypes: [
+      {value: '1', name: '椁愰ギ'},
+      {value: '7', name: '姹戒慨'},
+      {value: '6', name: '宸ヤ笟浼佷笟' },
+      {value: '2', name: '宸ュ湴'},
+      {value: '3', name: '鐮佸ご'},
+      {value: '4', name: '鍫嗗満'},
+      {value: '5', name: '鎼呮媽绔�' },
+    ],
+    sceneTypeIndex: 0,
+    msg: [{
+        name: "浼佷笟鍚嶇О",
+        id: "ciName",
+        input: true,
+        value: '',
+        noValue: false,
+      },
+      {
+        name: "浼佷笟鍦板潃",
+        id: "ciAddress",
+        input: true,
+        value: '',
+        noValue: false,
+      },
+      {
+        name: "淇$敤浠g爜",
+        id: "ciOrgCode",
+        input: true,
+        value: "",
+        noValue: false,
+      },
+      {
+        name: "娉曚汉",
+        id: "ciJuridicalPerson",
+        input: true,
+        value: '',
+        noValue: false,
+      },
+      {
+        name: "鑱旂郴浜�",
+        id: "ciContactName",
+        input: true,
+        value: '',
+        noValue: false,
+      },
+      {
+        name: "鑱旂郴鏂瑰紡",
+        id: "ciTelephone",
+        input: true,
+        value: '',
+        noValue: false,
+      },
+    ],
+  },
+
+  ready() {
+    this.setData({
+      loadingText: '涓婁紶涓�',
+      loadCompleteText: '涓婁紶瀹屾垚'
+    })
+
+    this.setData({
+      ledger: companyLedger[this.data.sceneType]
+    })
+    this.getCompanyInfo()
+  },
+
+  /**
+   * 缁勪欢鐨勬柟娉曞垪琛�
+   */
+  methods: {
+    changeSceneType(e) {
+      let i = e.detail.value
+      this.setData({
+        sceneTypeIndex: i
+      })
+    },
+
+    //鑾峰彇浼佷笟淇℃伅
+    getCompanyInfo() {
+      var that = this
+      userservice.getBaseInfo(app.globalData.accessToken.userId, {
+        success(data) {
+          const msg = that.data.msg
+          if (data.company != null) {
+            const info = data.company
+            msg[0].value = info.ciName
+            msg[1].value = info.ciAddress
+            msg[2].value = info.ciOrgCode
+            msg[3].value = info.ciJuridicalPerson
+            msg[4].value = info.ciContactName
+            msg[5].value = info.ciTelephone
+            that.setData({
+              msg, info
+            })
+          }
+        }
+      }, app.globalData.accessToken.openId)
+      ledgerservice.getLedgerDetail(
+        app.globalData.accessToken.userId, that.data.ledger.ledgerSubTypeId, that.data.ledger.sceneType, undefined, {
+          success(res) {
+            if (res.length > 0) {
+              let detail = res[0]
+              if (detail.upLoad) {
+                let imgFiles = [{
+                  url: detail.path1[0],
+                  loading: false
+                }]
+                that.setData({
+                  imgFiles
+                })
+              }
+            }
+          }
+        })
+    },
+
+    //鎻愪氦浼佷笟淇℃伅
+    _submit() {
+      var that = this
+      this.setData({loading: true})
+      authservice.authCompany(app.globalData.accessToken.openId, this.data.info, {
+        success(res) {
+          that.submintLedger()
+        },
+      })
+    },
+
+    //鎻愪氦鍥剧墖淇℃伅
+    submintLedger() {
+      if (this.data.imgFiles.length == 0) {
+        this.setData({
+          loading: false
+        })
+        wx.navigateBack({
+          delta: 1,
+        })
+        return
+      }
+      if (this.data.imgFiles[0].url.indexOf('http') != -1) {
+        wx.downloadFile({
+          url: this.data.imgFiles[0].url,
+          success: (res) => {
+            const imgPath = res.tempFilePath
+            this.data.imgFiles[0].url = imgPath
+            this._uploadLedger()
+          }
+        })
+      } else {
+        this._uploadLedger()
+      }
+    },
+
+    //涓婁紶瀹屾垚鍚庯紝鍥為��
+    _success(res) {
+      wx.navigateBack({
+        delta: 1,
+      })
+    }
+    
+  }
+})
\ No newline at end of file
diff --git a/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.json b/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.json
new file mode 100644
index 0000000..90eea0c
--- /dev/null
+++ b/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.json
@@ -0,0 +1,10 @@
+{
+  "component": true,
+  "usingComponents": {
+    "mp-cells":"/component/cells/cells",
+    "input-cell":"/component/inputcell/inputcell",
+    "mp-icon": "/component/icon/icon",
+    "mp-toptips":"/component/toptips/toptips",
+    "mp-upload":"/component/uploader/uploader"
+  }
+}
\ No newline at end of file
diff --git a/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.wxml b/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.wxml
new file mode 100644
index 0000000..a2ebfe2
--- /dev/null
+++ b/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.wxml
@@ -0,0 +1,23 @@
+<!--pages/mUser/baseC/c_company-info/c_company-info.wxml-->
+<view class="page__bd">
+  <!-- <view class="top-card">
+    <view class="tag"><text style="color: transparent;">*</text>浼佷笟绫诲瀷</view>
+    <picker mode="selector" bindchange="changeSceneType" value="{{sceneTypeIndex}}" range="{{sceneTypes}}" range-key="name" class="value">
+      <view class="picker-text">{{sceneTypes[sceneTypeIndex].name}}</view>
+    </picker>
+    <mp-icon icon="arrow" color="#59D5B3" size="{{10}}"></mp-icon>
+  </view> -->
+  <mp-toptips type="error" msg="{{errorMsg}}" show="{{errorMsg}}" delay="2000"></mp-toptips>
+
+  <view class="items">
+    <mp-cells>
+      <input-cell id="{{item.id}}" wx:for="{{msg}}" wx:key="index" item="{{item}}" bindpassValue="changeMsg"></input-cell>
+    </mp-cells>
+  </view>
+  <view class="weui-upload-view">
+    <mp-upload title="涓婁紶钀ヤ笟鎵х収" titleClass="upload-title-class" max-count="1" files="{{imgFiles}}" binduploadImg="uploadFile" binddelete="delImg"></mp-upload>
+  </view>
+</view>
+<view class="page__ft">
+  <view class="submit" bindtap="onSubmit">{{submitText}}</view>
+</view>
\ No newline at end of file
diff --git a/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.wxss b/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.wxss
new file mode 100644
index 0000000..5ea7857
--- /dev/null
+++ b/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.wxss
@@ -0,0 +1,48 @@
+/* pages/mUser/baseC/c_company-info/c_company-info.wxss */
+.top-card {
+  position: relative;
+  display: flex;
+  flex-direction: row;
+  background-color: white;
+  border-top-left-radius: 8px;
+  border-top-right-radius: 8px;
+  padding: 8px 16px;
+  /* margin: 0 8px; */
+  font-size: 16px;
+}
+
+.picker-text {
+  color: var(--fyui-primary-color);
+}
+
+.items {
+  position: relative;
+  padding: 0 16px;
+  background-color: white;
+}
+
+.top-card .tag {
+  /* display: inline-block; */
+  width: 105px;
+  white-space: nowrap;
+}
+
+.top-card .value {
+  flex-grow: 1;
+}
+
+.top-card .value view {
+  max-width: 200px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.weui-upload-view {
+  background-color: white;
+  padding: 16px;
+}
+
+.page__ft {
+  background-color: white;
+}
\ No newline at end of file
diff --git a/pages/mUser/baseC/cSceneInfo/cSceneInfo.js b/pages/mUser/baseC/cSceneInfo/cSceneInfo.js
new file mode 100644
index 0000000..695ea15
--- /dev/null
+++ b/pages/mUser/baseC/cSceneInfo/cSceneInfo.js
@@ -0,0 +1,267 @@
+// pages/mUser/baseC/cSceneInfo/cSceneInfo.js
+import {sceneInfo, sceneLedger} from '../../../../data/sceneInfo'
+import userservice from '../../../../service/userservice'
+import deviceservice from '../../../../service/deviceservice'
+import ledgerservice from "../../../../service/ledgerservice"
+import bInputCheck from '../../../../base/behaviors/bInputCheck'
+import bUploadLedger from '../../../mLedger/behaviors/bUploadLedger'
+import bLoadingToast from '../../../../base/behaviors/bLoadingToast'
+
+const app = getApp()
+
+Component({
+  behaviors: [bInputCheck, bUploadLedger, bLoadingToast],
+  options: {
+    addGlobalClass: true,
+  },
+  /**
+   * 缁勪欢鐨勫睘鎬у垪琛�
+   */
+  properties: {
+    submitText: {
+      type: String,
+      value: '鎻愪氦'
+    },
+    sceneType: {
+      type: String,
+      value: '1'
+    },
+    authStatus: {
+      type: Boolean,
+      value: false
+    }
+  },
+
+  ready() {
+    this.setData({
+      loadingText: '涓婁紶涓�',
+      loadCompleteText: '涓婁紶瀹屾垚'
+    })
+    const info = sceneInfo()
+    this.setData({
+      msg: info.get(this.data.sceneType),
+      ledger: sceneLedger[this.data.sceneType]
+    })
+    //鑾峰彇鍦烘櫙淇℃伅
+    this.getSceneInfo()
+  },
+
+  /**
+   * 缁勪欢鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    msg: [],
+    info: {}
+  },
+
+  /**
+   * 缁勪欢鐨勬柟娉曞垪琛�
+   */
+  methods: {
+    //鑾峰彇鍦烘櫙淇℃伅
+    getSceneInfo() {
+      var that = this
+      userservice.getBaseInfo(app.globalData.accessToken.userId, {
+        success(data) {
+          const msg = that.data.msg
+          switch (that.data.sceneType) {
+            case '1':
+              if (data.baseInfo != null) {
+                msg[0].value = data.baseInfo.biName
+                msg[1].value = data.baseInfo.biNickName
+                msg[3].value = data.baseInfo.biAddress
+                msg[10].value = data.baseInfo.biContact
+                msg[11].value = data.baseInfo.biTelephone
+                msg[12].value = data.baseInfo.biTownName == null ? [] : [
+                  data.baseInfo.biProvinceName, data.baseInfo.biCityName, data.baseInfo.biDistrictName, data.baseInfo.biTownName,
+                  data.baseInfo.biProvinceCode, data.baseInfo.biCityCode, data.baseInfo.biDistrictCode, data.baseInfo.biTownCode,
+                ]
+                msg[12].displayValue = data.baseInfo.biTownName == null ? [] : [
+                  data.baseInfo.biProvinceName, data.baseInfo.biCityName, data.baseInfo.biDistrictName, data.baseInfo.biTownName,
+                ]
+              }
+              if (data.specialInfo != null) {
+                msg[2].value = data.specialInfo.rbCuisine
+                msg[2].options.forEach(o => {
+                  o.checked = false
+                });
+                msg[2].value.split(';').forEach(v => {
+                  for (let i = 0; i < msg[2].options.length; i++) {
+                    const o = msg[2].options[i];
+                    if (v == o.name) {
+                      o.checked = true
+                      break
+                    } else if (o.hasRemark) {
+                      o.checked = true
+                      o.remark += v
+                    }
+                  }
+                });
+                const s = data.specialInfo.rbTotalSeating
+                msg[4].value = data.specialInfo.rbTotalSeating
+                msg[4].options.forEach(o => {
+                  o.checked = false
+                });
+                if (s == 0) {
+                  msg[4].options[0].checked = true
+                } else if (s > 0 && s <= 20) {
+                  msg[4].options[1].checked = true
+                } else if (s > 20 && s <= 50) {
+                  msg[4].options[2].checked = true
+                } else if (s > 50 && s <= 100) {
+                  msg[4].options[3].checked = true
+                } else {
+                  msg[4].options[4].checked = true
+                }
+                msg[7].value = data.specialInfo.rbCookingRangeNum
+                msg[8].value = parseInt(data.specialInfo.rbCookingOilCapacity) * 12
+                msg[9].value = data.specialInfo.rbCookingOilType
+                msg[9].options.forEach(o => {
+                  o.checked = false
+                });
+                msg[9].value.split(';').forEach(v => {
+                  for (let i = 0; i < msg[9].options.length; i++) {
+                    const o = msg[9].options[i];
+                    if (v == o.name) {
+                      o.checked = true
+                      break
+                    } else if (o.hasRemark) {
+                      o.checked = true
+                      o.remark += v
+                    }
+                  }
+                });
+                msg[13].value = data.specialInfo.rbConcentrationArea
+                msg[14].value = data.specialInfo.rbOutfallCount
+                msg[15].value = data.specialInfo.rbOutfallLocation
+                msg[16].value = data.specialInfo.rbOutfallNum
+              }
+              deviceservice.getPurifyDeviceInfo(app.globalData.accessToken.userId, {
+                success(res) {
+                  if (res.length > 0) {
+                    that.setData({
+                      ['msg[5].value']: res[0].fpNum
+                    })
+                  }
+                }
+              })
+              deviceservice.getMoniterDeviceInfo(app.globalData.accessToken.userId, {
+                success(res) {
+                  if (res.length > 0) {
+                    that.setData({
+                      ['msg[6].value']: res[0].mdNum
+                    })
+                  }
+                }
+              })
+              ledgerservice.getLedgerDetail(
+                app.globalData.accessToken.userId, that.data.ledger.ledgerSubTypeId, that.data.ledger.sceneType, undefined, {
+                  success(res) {
+                    if (res.length > 0) {
+                      let detail = res[0]
+                      if (detail.upLoad) {
+                        let imgFiles = [{
+                          url: detail.path1[0],
+                          loading: false
+                        }]
+                        that.setData({
+                          imgFiles
+                        })
+                      }
+                    }
+                  }
+                })
+              break;
+            case '2':
+
+              break;
+            case '3':
+
+              break;
+            case '4':
+
+              break;
+            case '5':
+
+              break;
+            case '6':
+
+              break;
+            case '7':
+
+              break;
+            default:
+              break;
+          }
+          console.log(msg);
+          that.setData({
+            msg
+          })
+        }
+      }, app.globalData.accessToken.openId)
+    },
+
+    //鎻愪氦鍦烘櫙淇℃伅
+    _submit() {
+      var that = this
+      this.setData({
+        loading: true
+      })
+      //閽堝涓嶅悓鍦烘櫙锛屾暟鎹粨鏋勪細鏈変笉鍚岀殑瀹氬埗闇�姹�
+      switch (this.data.sceneType) {
+        case '1':
+          const m = this.data.msg[4]
+          for (let i = 0; i < m.options.length; i++) {
+            const o = m.options[i];
+            if (o.checked) {
+              this.setData({
+                [`info.${m.id}`]: o.value
+              })
+              break
+            }
+          }
+          break;
+        default:
+          break;
+      }
+      const sceneInfoStr = JSON.stringify(this.data.info)
+      userservice.authScene(app.globalData.accessToken.openId, app.globalData.userInfo.extension2, sceneInfoStr, {
+        success(res) {
+          that.submintLedger()
+        },
+      })
+    },
+
+    //鎻愪氦鍥剧墖淇℃伅
+    submintLedger() {
+      if (this.data.imgFiles.length == 0) {
+        this.setData({
+          loading: false
+        })
+        wx.navigateBack({
+          delta: 1,
+        })
+        return
+      }
+      if (this.data.imgFiles[0].url.indexOf('http') != -1) {
+        wx.downloadFile({
+          url: this.data.imgFiles[0].url,
+          success: (res) => {
+            const imgPath = res.tempFilePath
+            this.data.imgFiles[0].url = imgPath
+            this._uploadLedger()
+          }
+        })
+      } else {
+        this._uploadLedger()
+      }
+    },
+
+    //涓婁紶瀹屾垚鍚庯紝鍥為��
+    _success(res) {
+      wx.navigateBack({
+        delta: 1,
+      })
+    }
+  }
+})
\ No newline at end of file
diff --git a/pages/mUser/baseC/cSceneInfo/cSceneInfo.json b/pages/mUser/baseC/cSceneInfo/cSceneInfo.json
new file mode 100644
index 0000000..fdcdb53
--- /dev/null
+++ b/pages/mUser/baseC/cSceneInfo/cSceneInfo.json
@@ -0,0 +1,12 @@
+{
+  "component": true,
+  "usingComponents": {
+    "mp-cells":"/component/cells/cells",
+    "input-cell":"/component/inputcell/inputcell",
+    "mp-icon": "/component/icon/icon",
+    "mp-toptips":"/component/toptips/toptips",
+    "mp-upload":"/component/uploader/uploader",
+    "mp-checkboxgroup": "/component/checkboxgroup/checkboxgroup",
+    "mp-radiogroup": "/component/radiogroup/radiogroup"
+  }
+}
\ No newline at end of file
diff --git a/pages/mUser/baseC/cSceneInfo/cSceneInfo.wxml b/pages/mUser/baseC/cSceneInfo/cSceneInfo.wxml
new file mode 100644
index 0000000..df23482
--- /dev/null
+++ b/pages/mUser/baseC/cSceneInfo/cSceneInfo.wxml
@@ -0,0 +1,42 @@
+<!--pages/mUser/baseC/cSceneInfo/cSceneInfo.wxml-->
+<view class="page__bd">
+  <mp-toptips type="error" msg="{{errorMsg}}" show="{{errorMsg}}" delay="2000"></mp-toptips>
+
+  <view class="items">
+    <mp-cells>
+      <block wx:for="{{msg}}" wx:key="index">
+        <block wx:if="{{item.type == 'checkbox'}}">
+          <view class="hr-view"></view>
+          <view id="{{item.id}}" class="item-title"><text class="{{item.required != false ? 'required' : 'not-required'}}">*</text>{{item.name}}</view>
+          <mp-checkboxgroup options="{{item.options}}" data-index="{{index}}" bindchange="selectChange"></mp-checkboxgroup>
+        </block>
+        <block wx:elif="{{item.type == 'radio'}}">
+          <view class="hr-view"></view>
+          <view id="{{item.id}}" class="item-title"><text class="{{item.required != false ? 'required' : 'not-required'}}">*</text>{{item.name}}</view>
+          <mp-radiogroup options="{{item.options}}" data-index="{{index}}" bindchange="selectChange"></mp-radiogroup>
+        </block>
+        <block wx:elif="{{item.type == 'picker'}}">
+          <view class="hr-view"></view>
+          <view class="top-card">
+            <view id="{{item.id}}" class="tag"><text class="{{item.required != false ? 'required' : 'not-required'}}">*</text>{{item.name}}</view>
+            <picker wx:if="{{item.pickerMode == 'selector'}}" mode="selector" bindchange="pickerChange" data-index="{{index}}" data-mode="selector" value="{{item.selectIndex}}" range="{{item.options}}" range-key="name" class="value">
+              <view class="picker-text">{{item.options[item.selectIndex].name}}</view>
+            </picker>
+            <picker wx:elif="{{item.pickerMode == 'region'}}" mode="region" bindchange="pickerChange" data-index="{{index}}" data-mode="region" value="{{item.displayValue}}" class="value" level="sub-district">
+              <view class="picker-text" wx:if="{{item.value.length > 0}}">{{item.value[0] + (item.value[1] == item.value[0] ? '' : item.value[1]) + item.value[2] + item.value[3]}}</view>
+              <view wx:else class="picker-text" style="color: #B2B2B2;">璇烽�夋嫨琛楅晣</view>
+            </picker>
+            <mp-icon icon="arrow" color="black" size="{{10}}"></mp-icon>
+          </view>
+        </block>
+        <input-cell id="{{item.id}}" wx:else item="{{item}}" bindpassValue="changeMsg"></input-cell>
+      </block>
+    </mp-cells>
+  </view>
+  <view class="weui-upload-view">
+    <mp-upload title="涓婁紶椋熷搧缁忚惀璁稿彲璇�" titleClass="upload-title-class" max-count="1" files="{{imgFiles}}" binduploadImg="uploadFile" binddelete="delImg"></mp-upload>
+  </view>
+</view>
+<view class="page__ft">
+  <view class="submit" bindtap="onSubmit">{{submitText}}</view>
+</view>
\ No newline at end of file
diff --git a/pages/mUser/baseC/cSceneInfo/cSceneInfo.wxss b/pages/mUser/baseC/cSceneInfo/cSceneInfo.wxss
new file mode 100644
index 0000000..8dc015a
--- /dev/null
+++ b/pages/mUser/baseC/cSceneInfo/cSceneInfo.wxss
@@ -0,0 +1,82 @@
+/* pages/mUser/baseC/cSceneInfo/cSceneInfo.wxss */
+.top-card {
+  /* width: 100vw; */
+  position: relative;
+  display: flex;
+  flex-direction: row;
+  /* justify-content: space-between; */
+  background-color: white;
+  padding: 8px 0px;
+  /* margin: 0 8px; */
+  font-size: 1rem;
+  flex-wrap: nowrap;
+}
+
+.picker-text {
+  /* color: var(--fyui-primary-color); */
+  color: var(--fyui-text-color_1);
+}
+
+.items {
+  position: relative;
+  padding: 0 10px;
+  background-color: white;
+}
+
+.item-title {
+  white-space: nowrap;
+  display: inline-block;
+  font-size: 1rem;
+  width: 32vw;
+  margin-top: 8px;
+}
+
+.top-card .tag {
+  flex-shrink: 0;
+  width: 32vw;
+  white-space: nowrap;
+  /* background-color: seagreen; */
+}
+
+.top-card .value {
+  flex-grow: 1;
+}
+
+.top-card .value view {
+  /* white-space: nowrap; */
+  display: -webkit-box;
+  -webkit-line-clamp: 1;
+  -webkit-box-orient: vertical;
+  overflow-x: hidden;
+  text-overflow: ellipsis;
+  /* background-color: bisque; */
+}
+
+.weui-upload-view {
+  background-color: white;
+  padding: 16px;
+}
+
+.page__ft {
+  background-color: white;
+}
+
+.hr-view {
+  height: 2rpx;
+  margin: 0 0rpx;
+  background-color: #f1f1f1;
+}
+
+.required {
+  color: red;
+  text-align: center;
+  vertical-align: middle;
+}
+
+.not-required {
+  color: transparent;
+}
+
+.upload-title-class {
+  font-size: small;
+}
\ No newline at end of file
diff --git a/pages/mUser/behaviors/bLogin.js b/pages/mUser/behaviors/bLogin.js
new file mode 100644
index 0000000..0ceb3dc
--- /dev/null
+++ b/pages/mUser/behaviors/bLogin.js
@@ -0,0 +1,118 @@
+import userservice from '../../../service/userservice'
+import moment from '../../../utils/moment.min'
+
+const app = getApp()
+
+/**
+ * 鐧诲綍娴佺▼
+ */
+module.exports = Behavior({
+  data: {
+
+  },
+  lifetimes: {
+    attached: function () {}
+  },
+  methods: {
+    loginPw(accessTokenPW) {
+      // accessTokenPW.nickName = '\xF0\x9F\x98\x84'
+      // debugger
+      wx.showLoading({
+        title: '鐧诲綍涓�',
+        mask: true,
+      })
+      setTimeout(() => {
+        wx.hideLoading()
+      }, 10000);
+      var that = this
+      wx.login({
+        success: (res) => {
+          console.log(res);
+          accessTokenPW.code = res.code
+          userservice.loginPW(accessTokenPW, {
+            success(data) {
+              wx.hideLoading()
+              if (data.success) {
+                wx.getStorage({
+                  key: 'accessToken',
+                  success(res) {
+                    app.globalData.accessToken = res.data
+                    app.globalData.accessToken.userId = data.userId
+                    app.globalData.accessToken.suserId = data.suserId
+                    app.globalData.accessToken.openId = data.openId
+                    if (accessTokenPW.userName) {
+                      app.globalData.accessToken.userName = accessTokenPW.userName
+                    }
+                    if (accessTokenPW.password) {
+                      app.globalData.accessToken.password = accessTokenPW.password
+                    }
+                    wx.setStorage({
+                      key: 'accessToken',
+                      data: app.globalData.accessToken,
+                    })
+                    that.gotoHomePage()
+                  },
+                  fail(e) {
+                    app.globalData.accessToken = {
+                      userName: accessTokenPW.userName,
+                      password: accessTokenPW.password,
+                      userId: data.userId,
+                      suserId: data.suserId,
+                      openId: data.openId
+                    }
+                    wx.setStorage({
+                      key: 'accessToken',
+                      data: app.globalData.accessToken,
+                    })
+                    that.gotoHomePage()
+                  }
+                })
+
+              } else {
+                that._onLoginFail()
+              }
+            },
+            complete() {
+              // wx.hideLoading()
+              that.setData({
+                loading: false
+              })
+            }
+          })
+        },
+      })
+    },
+
+    gotoHomePage() {
+      if (app.globalData.accessToken.userName == 'pcheck') {
+        wx.navigateTo({
+          url: '/pages/mExtra/pSupervisiontask/pSupervisiontask',
+        })
+      } else {
+        userservice.getUserInfo(app.globalData.accessToken.userId, {
+          success(data) {
+            if (data.uiCreateTime) {
+              const registerTime = moment(data.uiCreateTime)
+              const now = moment()
+              app.globalData.newUser = now.diff(registerTime, 'months') <= 1
+            }
+            console.log(app.globalData.newUser); 
+  
+            app.globalData.userInfo = data
+            app.globalData.isLogin = true
+            wx.setStorage({
+              key: 'userInfo',
+              data: data,
+              success: (result) => {
+                wx.switchTab({
+                  url: '/pages/home/home',
+                })
+              }
+            })
+          }
+        })
+      }
+      
+    },
+  }
+})
\ No newline at end of file
diff --git a/pages/mUser/companyauthentication/companyauthentication.js b/pages/mUser/companyauthentication/companyauthentication.js
new file mode 100644
index 0000000..38db596
--- /dev/null
+++ b/pages/mUser/companyauthentication/companyauthentication.js
@@ -0,0 +1,18 @@
+// pages/mUser/companyauthentication/companyauthentication.js
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+})
\ No newline at end of file
diff --git a/pages/mUser/companyauthentication/companyauthentication.json b/pages/mUser/companyauthentication/companyauthentication.json
new file mode 100644
index 0000000..a21779f
--- /dev/null
+++ b/pages/mUser/companyauthentication/companyauthentication.json
@@ -0,0 +1,6 @@
+{
+  "navigationBarTitleText": "浼佷笟淇℃伅璁よ瘉",
+  "usingComponents": {
+    "c-company-info": "../baseC/cCompanyInfo/cCompanyInfo"
+  }
+}
\ No newline at end of file
diff --git a/pages/mUser/companyauthentication/companyauthentication.wxml b/pages/mUser/companyauthentication/companyauthentication.wxml
new file mode 100644
index 0000000..8b93ac9
--- /dev/null
+++ b/pages/mUser/companyauthentication/companyauthentication.wxml
@@ -0,0 +1,6 @@
+<!--pages/mUser/companyauthentication/companyauthentication.wxml-->
+<view class="page">
+  <image class="banner-bg" src="/res/icons/companyinfo-1.png" mode="widthFix"></image>
+  <view class="tips">璇蜂粩缁嗘鏌ヤ互涓嬩俊鎭紝纭鏄惁姝g‘锛岃皟鏁村畬鎴愬悗鎻愪氦瀹屾垚璁よ瘉锛堝叾涓甫*鐨勪负蹇呭~椤癸紝鍏朵綑涓洪�夊~椤癸級</view>
+  <c-company-info></c-company-info>
+</view>
diff --git a/pages/mUser/companyauthentication/companyauthentication.wxss b/pages/mUser/companyauthentication/companyauthentication.wxss
new file mode 100644
index 0000000..0a35fc2
--- /dev/null
+++ b/pages/mUser/companyauthentication/companyauthentication.wxss
@@ -0,0 +1,18 @@
+/* pages/mUser/companyauthentication/companyauthentication.wxss */
+.tips {
+  position: relative;
+  color: white;
+  padding: 16px;
+  font-size: 14px;
+  font-weight: 550;
+}
+
+.banner-bg {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 0;
+  /* background-color: aqua; */
+}
\ No newline at end of file
diff --git a/pages/mUser/companyregister/companyregister.js b/pages/mUser/companyregister/companyregister.js
new file mode 100644
index 0000000..c18e632
--- /dev/null
+++ b/pages/mUser/companyregister/companyregister.js
@@ -0,0 +1,66 @@
+// pages/mUser/companyregister/companyregister.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/m_user/userregistergov/userregistergov.json b/pages/mUser/companyregister/companyregister.json
similarity index 100%
copy from pages/m_user/userregistergov/userregistergov.json
copy to pages/mUser/companyregister/companyregister.json
diff --git a/pages/mUser/companyregister/companyregister.wxml b/pages/mUser/companyregister/companyregister.wxml
new file mode 100644
index 0000000..4f84661
--- /dev/null
+++ b/pages/mUser/companyregister/companyregister.wxml
@@ -0,0 +1,2 @@
+<!--pages/mUser/companyregister/companyregister.wxml-->
+
diff --git a/pages/mUser/companyregister/companyregister.wxss b/pages/mUser/companyregister/companyregister.wxss
new file mode 100644
index 0000000..d4b9ef6
--- /dev/null
+++ b/pages/mUser/companyregister/companyregister.wxss
@@ -0,0 +1 @@
+/* pages/mUser/companyregister/companyregister.wxss */
\ No newline at end of file
diff --git a/pages/mUser/mine/mine.js b/pages/mUser/mine/mine.js
new file mode 100644
index 0000000..e51ab94
--- /dev/null
+++ b/pages/mUser/mine/mine.js
@@ -0,0 +1,172 @@
+// pages/mine/mine.js
+import userservice from '../../../service/userservice'
+
+const app = getApp()
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    version: app.globalData.version,
+    //璁よ瘉鐘舵�侊紝[浼佷笟, 鍦烘櫙, 涓汉]
+    authStatus:[],
+    //鍦烘櫙绫诲瀷
+    sceneType: app.globalData.userInfo.extension2
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad: function (options) {
+    this.setData({
+      userRealName: app.globalData.userInfo.realname,
+      sceneType: app.globalData.userInfo.extension2
+    })
+    this.getBaseInfo()
+  },
+
+  onShow() {
+    this.getAuthStatus()
+  },
+
+  //鑾峰彇鐢ㄦ埛璁よ瘉鐘舵��
+  getAuthStatus() {
+    var that = this
+    userservice.getAuthStatus(app.globalData.accessToken.openId, app.globalData.accessToken.userId, {
+      success(res) {
+        if (res.success) {
+          that.setData({
+            authStatus: res.data
+          })
+        }else{
+          wx.showToast({
+            title: res.message,
+            duration: 2000,
+            icon: 'error',
+          })
+        }
+      }
+    })
+  },
+
+  getBaseInfo() {
+    var that = this
+    userservice.getBaseInfo(app.globalData.accessToken.userId, {
+      success(data) {
+        if (data.company != null) {
+          that.setData({
+            companyName: data.company.ciName
+          }) 
+        }
+      }
+    }, app.globalData.accessToken.openId)
+  },
+
+  logout() {
+    wx.reLaunch({
+      url: '/pages/mUser/userlogin/userlogin',
+    })
+  },
+
+  goto(e) {
+    var url = ""
+    var index = e.currentTarget.dataset.index
+    switch (index) {
+      case "0":
+        //鐩戞祴鏁版嵁
+        url = "/pages/mService/pDevicedata/pDevicedata"
+        break;
+      case "1":
+        //閫氱煡绠$悊
+        url = "/pages/mNotice/notice/notice"
+        break;
+      case "2":
+        //鎶�鏈敮鎸�
+        url = "/pages/mUser/pSupport/pSupport"
+        break;
+      case "3":
+        //鎴戠殑鏀惰棌
+        url = ""
+        break;
+      case "4":
+        //鎴戣鍜ㄨ
+        url = "/pages/mConsult/consultonline/consultonline"
+        break;
+      case "5":
+        //鐜繚鏃ョ▼
+        url = "/pages/mService/pSchedule/pSchedule"
+        break;
+      case "6":
+        //鍏充簬
+        url = "/pages/mUser/pAbout/pAbout"
+        break;
+      case "7":
+        //鎿嶄綔鎸囧紩
+        url = "/pages/mUser/pInstructions/pInstructions"
+        break;
+    }
+    if (url != "") {
+      wx.navigateTo({
+        url: url
+      })
+    } else {
+      wx.showToast({
+        title: '鍔熻兘鏁鏈熷緟',
+        duration: 1000,
+        icon: 'none',
+        mask: true,
+      })
+    }
+  },
+
+  //璁よ瘉
+  gotoAuthentication(e) {
+    //绛夊緟璁よ瘉鐘舵�佸姞杞藉畬姣�
+    if (this.data.authStatus.length == 0) return
+    var url = ""
+    var index = e.currentTarget.dataset.index
+    switch (index) {
+      //浼佷笟璁よ瘉
+      case "0":
+        url = "/pages/mUser/companyauthentication/companyauthentication"
+        break;
+      //鍦烘櫙璁よ瘉
+      case "1":
+        url = "/pages/mUser/sceneauthentication/sceneauthentication"
+        break;
+      //涓汉璁よ瘉
+      case "2":
+        url = "/pages/mUser/personalauthentication/personalauthentication"
+        break;
+    }
+    if (url != "") {
+      wx.navigateTo({
+        url: url,
+        success: (res) => {
+          res.eventChannel.emit('acceptDataFromOpenerPage', {
+            authStatus: this.data.authStatus[parseInt(index)]
+          })
+        },
+      })
+    } else {
+      wx.showToast({
+        title: '鍔熻兘鏁鏈熷緟',
+        duration: 1000,
+        icon: 'none',
+        mask: true,
+      })
+    }
+  },
+
+  //鐜俊鐮�
+  gotoQrcode() {
+    wx.navigateTo({
+      url: '/pages/mUser/pQrcode/pQrcode',
+      // success: (res) => {
+      //   res.eventChannel.emit('acceptDataFromOpenerPage', app.globalData.)
+      // },
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/mUser/mine/mine.json b/pages/mUser/mine/mine.json
new file mode 100644
index 0000000..61c5995
--- /dev/null
+++ b/pages/mUser/mine/mine.json
@@ -0,0 +1,5 @@
+{
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTitleText": "鎴戠殑",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mUser/mine/mine.wxml b/pages/mUser/mine/mine.wxml
new file mode 100644
index 0000000..0d0e45b
--- /dev/null
+++ b/pages/mUser/mine/mine.wxml
@@ -0,0 +1,101 @@
+<!--pages/mine/mine.wxml-->
+<view class="page">
+  <view class="page__hd">
+    <view style="text-align: end;position: absolute;right: 16px;">
+      <!-- <text style="font-size: 12px;color: white;">鐜俊鐮�</text> -->
+      <image bindtap="gotoQrcode" style="width: 24px;height: 24px;padding: 6px;" src="/res/icons/qrcode.png"></image>
+    </view>
+    <view class="flex-h" style="margin-top: 30px;">
+      <image class="user-icon" src="/res/icons/learn_2.png" mode="aspectFill"></image>
+      <view class="flex-v">
+        <view class="user-name">{{userRealName}}</view>
+        <view class="user-tag">{{companyName}}</view>
+      </view>
+    </view>
+  </view>
+  <view class="page__bd">
+    <view class="fyui-panel user-authentication">
+      <view bindtap="gotoAuthentication" data-index="0">
+        <text class="{{authStatus[0] ? 'status-1' : 'status-2'}}">{{authStatus[0] ? '宸茶璇�' : '鏈璇�'}}</text>
+        <image src="/res/icons/icon3.png"></image>
+        <!-- <view>{{authStatus[0] ? '淇敼浼佷笟淇℃伅' : '浼佷笟淇℃伅璁よ瘉'}}</view> -->
+        <view>浼佷笟淇℃伅璁よ瘉</view>
+      </view>
+      <view wx:if="{{sceneType == 1}}" bindtap="gotoAuthentication" data-index="1">
+        <text class="{{authStatus[1] ? 'status-1' : 'status-2'}}">{{authStatus[1] ? '宸茶璇�' : '鏈璇�'}}</text>
+        <image src="/res/icons/scene_info.png"></image>
+        <!-- <view>{{authStatus[1] ? '淇敼搴楅摵淇℃伅' : '搴楅摵淇℃伅璁よ瘉'}}</view> -->
+        <view>搴楅摵淇℃伅璁よ瘉</view>
+      </view>
+      <view bindtap="gotoAuthentication" data-index="2">
+        <text class="{{authStatus[2] ? 'status-1' : 'status-2'}}">{{authStatus[2] ? '宸茶璇�' : '鏈璇�'}}</text>
+        <image src="/res/icons/personal.png"></image>
+        <!-- <view>{{authStatus[2] ? '淇敼涓汉淇℃伅' : '涓汉淇℃伅璁よ瘉'}}</view> -->
+        <view>涓汉淇℃伅璁よ瘉</view>
+      </view>
+    </view>
+    <view class="fyui-panel">
+      <view class="fyui-cell fyui-cell_select title" bindtap="goto" data-index="0">
+        <view class="fyui-cell__hd">
+          <image src="/res/icons/icon5.png" class="icon" />
+        </view>
+        <view class="fyui-cell__bd">鐩戞祴鏁版嵁</view>
+        <view class="fyui-cell__ft"></view>
+      </view>
+      <view class="fyui-cell fyui-cell_select title" bindtap="goto" data-index="1">
+        <view class="fyui-cell__hd">
+          <image src="/res/icons/icon4.png" class="icon" />
+        </view>
+        <view class="fyui-cell__bd">閫氱煡绠$悊</view>
+        <view class="fyui-cell__ft"></view>
+      </view>
+
+      <!-- <view class="fyui-cell fyui-cell_select title" bindtap="goto" data-index="3">
+        <view class="fyui-cell__hd">
+          <image src="/res/icons/my_favor.png" class="icon" />
+        </view>
+        <view class="fyui-cell__bd">鎴戠殑鏀惰棌</view>
+        <view class="fyui-cell__ft"></view>
+      </view> -->
+      <view class="fyui-cell fyui-cell_select title" bindtap="goto" data-index="4">
+        <view class="fyui-cell__hd">
+          <image src="/res/icons/my_consult.png" class="icon" />
+        </view>
+        <view class="fyui-cell__bd">鎴戣鍜ㄨ</view>
+        <view class="fyui-cell__ft"></view>
+      </view>
+      <view class="fyui-cell fyui-cell_select title" bindtap="goto" data-index="5">
+        <view class="fyui-cell__hd">
+          <image src="/res/icons/my_schedule.png" class="icon" />
+        </view>
+        <view class="fyui-cell__bd">鐜繚鏃ョ▼</view>
+        <view class="fyui-cell__ft"></view>
+      </view>
+      <view class="fyui-cell fyui-cell_select title" bindtap="goto" data-index="7">
+        <view class="fyui-cell__hd">
+          <image src="/res/icons/icon7.png" class="icon" />
+        </view>
+        <view class="fyui-cell__bd">鎿嶄綔鎸囧紩</view>
+        <view class="fyui-cell__ft"></view>
+      </view>
+      <view class="fyui-cell fyui-cell_select title" bindtap="goto" data-index="2">
+        <view class="fyui-cell__hd">
+          <image src="/res/icons/icon5.png" class="icon" />
+        </view>
+        <view class="fyui-cell__bd">鎶�鏈敮鎸�</view>
+        <view class="fyui-cell__ft"></view>
+      </view>
+      <view class="fyui-cell fyui-cell_select title" bindtap="goto" data-index="6">
+        <view class="fyui-cell__hd">
+          <image src="/res/icons/icon6.png" class="icon" />
+        </view>
+        <view class="fyui-cell__bd">鍏充簬</view>
+        <view class="fyui-cell__ft">{{version}}</view>
+      </view>
+    </view>
+  </view>
+
+  <view class="page__ft">
+    <view class="logout" bindtap="logout">閫�鍑鸿处鎴�</view>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mUser/mine/mine.wxss b/pages/mUser/mine/mine.wxss
new file mode 100644
index 0000000..5cfaf71
--- /dev/null
+++ b/pages/mUser/mine/mine.wxss
@@ -0,0 +1,96 @@
+/* pages/mine/mine.wxss */
+.page__hd {
+  background: linear-gradient(to bottom, #57E4CB, #bbf3eb);
+  /* padding-top: 30px; */
+  padding-bottom: 30px;
+}
+
+.fyui-cell_select {
+  font-size: 16px;
+  padding-top: 12px;
+  padding-bottom: 12px;
+  border-bottom: 1px solid var(--fyui-BG_1);
+}
+
+.flex-h {
+  justify-content: flex-start;
+  align-items: center;
+}
+
+.flex-v {
+  flex: 1;
+  justify-content: space-between;
+  margin-left: 20px;
+}
+
+.logout {
+  border-radius: 4px;
+  margin: 8px;
+  padding: 8px;
+  background-color: white;
+}
+
+.user-icon {
+  width: 70px;
+  height: 70px;
+  border-radius: 50%;
+}
+
+.user-name {
+  /* white-space: nowrap; */
+  font-size: 16px;
+  font-weight: 600;
+}
+
+.user-tag {
+  display: flex;
+  font-size: 12px;
+  color: var(--fyui-text-color_2);
+}
+
+.title:active {
+  background-color: var(--fyui-BG-COLOR-ACTIVE);
+}
+
+.user-authentication {
+  position: relative;
+  display: flex;
+  justify-content: space-around;
+}
+
+.user-authentication>view {
+  position: relative;
+  text-align: center;
+  padding: 20px 16px;
+  font-size: 14px;
+  color: var(--fyui-text-color_2);
+}
+
+.user-authentication>view>image {
+  width: 40px;
+  height: 40px;
+}
+
+.user-authentication .status-1{
+  position: absolute;
+  top: 36px;
+  right: 10px;
+  font-size: 10px;
+  color: white;
+  background-color: #05EDC4;
+  border: white 2px solid;
+  padding: 0 4px;
+  border-radius: 4px;
+}
+
+.user-authentication .status-2{
+  position: absolute;
+  top: 36px;
+  right: 10px;
+  font-size: 10px;
+  color: white;
+  background-color: #F20202;
+  border: white 2px solid;
+  padding: 0 4px;
+  border-radius: 4px;
+}
\ No newline at end of file
diff --git a/pages/mUser/pAbout/pAbout.js b/pages/mUser/pAbout/pAbout.js
new file mode 100644
index 0000000..e108a11
--- /dev/null
+++ b/pages/mUser/pAbout/pAbout.js
@@ -0,0 +1,60 @@
+// pages/mUser/pAbout/pAbout.js
+const app = getApp()
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    version: app.globalData.version,
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  goto(e) {
+    var url = ""
+    var index = e.currentTarget.dataset.index
+    switch (index) {
+      case "0":
+        wx.downloadFile({
+          url: app.globalData.agreement,
+          success: function (res) {
+            wx.hideLoading()
+            const filePath = res.tempFilePath
+            wx.openDocument({
+              filePath: filePath,
+              success: function (res) {
+                console.log('鎵撳紑鏂囨。鎴愬姛')
+              },
+              fail(error) {
+                console.log(error);
+              }
+            })
+          }
+        })
+        return;
+      case "1":
+        url = "/pages/mUser/pChangepw/pChangepw"
+        break;
+    }
+    if (url != "") {
+      wx.navigateTo({
+        url: url
+      })
+    } else {
+      wx.showToast({
+        title: '鍔熻兘鏁鏈熷緟',
+        duration: 1000,
+        icon: 'none',
+        mask: true,
+      })
+    }
+  },
+
+})
\ No newline at end of file
diff --git a/pages/mUser/pAbout/pAbout.json b/pages/mUser/pAbout/pAbout.json
new file mode 100644
index 0000000..2677d80
--- /dev/null
+++ b/pages/mUser/pAbout/pAbout.json
@@ -0,0 +1,4 @@
+{
+  "navigationBarTitleText": "鍏充簬",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mUser/pAbout/pAbout.wxml b/pages/mUser/pAbout/pAbout.wxml
new file mode 100644
index 0000000..063baae
--- /dev/null
+++ b/pages/mUser/pAbout/pAbout.wxml
@@ -0,0 +1,25 @@
+<!--pages/mUser/pAbout/pAbout.wxml-->
+<view class="page">
+  <view class="page__hd">
+    <image src="/res/icons/app_icon.png"></image>
+    <view>{{version}}</view>
+  </view>
+  <view class="page__bd">
+    <view class="fyui-cell fyui-cell_select title" bindtap="goto" data-index="0">
+      <view class="fyui-cell__hd">
+      </view>
+      <view class="fyui-cell__bd">鏈嶅姟鍗忚</view>
+      <view class="fyui-cell__ft"></view>
+    </view>
+    <view class="fyui-cell fyui-cell_select title" bindtap="goto" data-index="1">
+      <view class="fyui-cell__hd">
+      </view>
+      <view class="fyui-cell__bd">淇敼瀵嗙爜</view>
+      <view class="fyui-cell__ft"></view>
+    </view>
+  </view>
+  <view class="page__ft">
+    <view>涓氬姟鎸囧锛氫笂娴峰競鐢熸�佺幆澧冨眬鎵ф硶鎬婚槦</view>
+    <view>鎶�鏈敮鎸侊細涓婃捣椋炵窘鐜繚绉戞妧鏈夐檺鍏徃</view>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mUser/pAbout/pAbout.wxss b/pages/mUser/pAbout/pAbout.wxss
new file mode 100644
index 0000000..aa45e62
--- /dev/null
+++ b/pages/mUser/pAbout/pAbout.wxss
@@ -0,0 +1,45 @@
+/* pages/mUser/pAbout/pAbout.wxss */
+.title:active {
+  background-color: var(--fyui-BG-COLOR-ACTIVE);
+}
+
+.fyui-cell_select {
+  font-size: 16px;
+  padding-top: 12px;
+  padding-bottom: 12px;
+  border-bottom: 1px solid rgb(238, 238, 238);
+}
+
+.page {
+  justify-content: space-between;
+  background-color: transparent;
+}
+
+.page__hd {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  height: 30vh;
+}
+
+.page__hd>image{
+  width: 88px;
+  height: 88px;
+}
+
+.page__hd>view{
+  font-size: 14px;
+  color: var(--fyui-text-color_2);
+  margin-top: 16px;
+}
+
+.page__bd{
+  flex: 1;
+  color: var(--fyui-text-color_1);
+}
+
+.page__ft{
+  font-size: 12px;
+  color: var(--fyui-text-color_3);
+}
\ No newline at end of file
diff --git a/pages/mUser/pChangepw/pChangepw.js b/pages/mUser/pChangepw/pChangepw.js
new file mode 100644
index 0000000..31fb6f8
--- /dev/null
+++ b/pages/mUser/pChangepw/pChangepw.js
@@ -0,0 +1,81 @@
+// pages/mUser/pChangepw/pChangepw.js
+import bInputCheck from '../../../base/behaviors/bInputCheck'
+import bLoadingToast from '../../../base/behaviors/bLoadingToast'
+import userservice from '../../../service/userservice'
+
+const app = getApp()
+
+Page({
+  behaviors: [bInputCheck, bLoadingToast],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    msg: [{
+        name: "鍘熷瘑鐮�",
+        id: "oldPassword",
+        input: true,
+        // type: 'password',
+        value: '',
+        noValue: false,
+      },
+      {
+        name: "鏂板瘑鐮�",
+        id: "newPassword",
+        input: true,
+        type: 'password',
+        value: '',
+        noValue: false,
+      },
+      {
+        name: "纭瀵嗙爜",
+        id: "pwCheck",
+        input: true,
+        type: 'password',
+        value: "",
+        noValue: false,
+      },
+    ],
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  _submit(e) {
+    if (e.oldPassword == e.newPassword) {
+      this.setData({
+        errorMsg: '鏂板瘑鐮佷笉鑳藉拰鍘熷瘑鐮佺浉鍚�',
+      })
+      return
+    }
+    userservice.changePW(app.globalData.accessToken.userId, e.oldPassword, e.newPassword, {
+      success(res) {
+        if (res.success) {
+          wx.navigateBack({
+            delta: 1,
+            success: () => {
+              wx.showToast({
+                title: res.message,
+                duration: 2000,
+                icon: 'success',
+                mask: true,
+              })
+            }
+          })
+        } else {
+          wx.showToast({
+            title: res.message,
+            duration: 2000,
+            icon: 'error',
+            mask: true,
+          })
+        }
+        
+      }
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/mUser/pChangepw/pChangepw.json b/pages/mUser/pChangepw/pChangepw.json
new file mode 100644
index 0000000..4c64798
--- /dev/null
+++ b/pages/mUser/pChangepw/pChangepw.json
@@ -0,0 +1,10 @@
+{
+  "navigationBarTitleText": "淇敼瀵嗙爜",
+  "usingComponents": {
+    "mp-cells":"/component/cells/cells",
+    "input-cell":"/component/inputcell/inputcell",
+    "mp-icon": "/component/icon/icon",
+    "mp-toptips":"/component/toptips/toptips",
+    "mp-upload":"/component/uploader/uploader"
+  }
+}
\ No newline at end of file
diff --git a/pages/mUser/pChangepw/pChangepw.wxml b/pages/mUser/pChangepw/pChangepw.wxml
new file mode 100644
index 0000000..30ba834
--- /dev/null
+++ b/pages/mUser/pChangepw/pChangepw.wxml
@@ -0,0 +1,15 @@
+<!--pages/mUser/pChangepw/pChangepw.wxml-->
+<view class="page">
+  <mp-toptips type="error" msg="{{errorMsg}}" show="{{errorMsg}}" delay="2000"></mp-toptips>
+
+  <view class="page__bd">
+    <view class="items">
+      <mp-cells>
+        <input-cell id="{{item.id}}" wx:for="{{msg}}" wx:key="id" item="{{item}}" bindpassValue="changeMsg"></input-cell>
+      </mp-cells>
+    </view>
+  </view>
+  <view class="page__ft">
+    <view class="submit" bindtap="onSubmit">鎻愪氦</view>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mUser/pChangepw/pChangepw.wxss b/pages/mUser/pChangepw/pChangepw.wxss
new file mode 100644
index 0000000..bc25448
--- /dev/null
+++ b/pages/mUser/pChangepw/pChangepw.wxss
@@ -0,0 +1,6 @@
+/* pages/mUser/pChangepw/pChangepw.wxss */
+.items {
+  position: relative;
+  padding: 0 16px;
+  background-color: white;
+}
\ No newline at end of file
diff --git a/pages/mUser/pInstructions/pInstructions.js b/pages/mUser/pInstructions/pInstructions.js
new file mode 100644
index 0000000..4449089
--- /dev/null
+++ b/pages/mUser/pInstructions/pInstructions.js
@@ -0,0 +1,26 @@
+// pages/mUser/pInstructions/pInstructions.js
+import $f from "../../../service/baserequest"
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    instruction: {
+      picPath: [
+        $f.baseIconUrl + 'instructions-1.png',
+        $f.baseIconUrl + 'instructions-2.png',
+        $f.baseIconUrl + 'instructions-3.png',
+        $f.baseIconUrl + 'instructions-4.png',
+      ],
+    }
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+})
\ No newline at end of file
diff --git a/pages/mUser/pInstructions/pInstructions.json b/pages/mUser/pInstructions/pInstructions.json
new file mode 100644
index 0000000..182a05a
--- /dev/null
+++ b/pages/mUser/pInstructions/pInstructions.json
@@ -0,0 +1,6 @@
+{
+  "navigationBarTitleText": "鎶�鏈寚寮�",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mUser/pInstructions/pInstructions.wxml b/pages/mUser/pInstructions/pInstructions.wxml
new file mode 100644
index 0000000..01ff005
--- /dev/null
+++ b/pages/mUser/pInstructions/pInstructions.wxml
@@ -0,0 +1,7 @@
+<!--pages/mUser/pInstructions/pInstructions.wxml-->
+<view class="page">
+  <view class="page__bd">
+    <image wx:for="{{instruction.picPath}}" wx:key="index" src="{{item}}" class="image" show-menu-by-longpress="true" mode="widthFix"></image>
+  </view>
+  <view class="page__ft"></view>
+</view>
\ No newline at end of file
diff --git a/pages/mUser/pInstructions/pInstructions.wxss b/pages/mUser/pInstructions/pInstructions.wxss
new file mode 100644
index 0000000..aca4496
--- /dev/null
+++ b/pages/mUser/pInstructions/pInstructions.wxss
@@ -0,0 +1,5 @@
+/* pages/mUser/pInstructions/pInstructions.wxss */
+image {
+  display: block;
+  width: 100%;
+}
\ No newline at end of file
diff --git a/pages/mUser/pQrcode/pQrcode.js b/pages/mUser/pQrcode/pQrcode.js
new file mode 100644
index 0000000..d354a25
--- /dev/null
+++ b/pages/mUser/pQrcode/pQrcode.js
@@ -0,0 +1,28 @@
+// pages/mUser/pQrcode/pQrcode.js
+import $f from "../../../service/baserequest"
+
+const app = getApp()
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    url:$f.baseFileUrl + `ledger/page/qrcode.html`
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    // this.getOpenerEventChannel().on('acceptDataFromOpenerPage', (data) => {
+    //   this.setData({
+    //   })
+    // })
+    this.setData({
+      url: $f.baseFileUrl + `ledger/page/qrcode.html?id=${app.globalData.accessToken.userId}`
+    })
+    console.log(this.data.url);
+  },
+})
\ No newline at end of file
diff --git a/pages/m_user/userregistergov/userregistergov.json b/pages/mUser/pQrcode/pQrcode.json
similarity index 100%
copy from pages/m_user/userregistergov/userregistergov.json
copy to pages/mUser/pQrcode/pQrcode.json
diff --git a/pages/mUser/pQrcode/pQrcode.wxml b/pages/mUser/pQrcode/pQrcode.wxml
new file mode 100644
index 0000000..ce77bdc
--- /dev/null
+++ b/pages/mUser/pQrcode/pQrcode.wxml
@@ -0,0 +1,2 @@
+<!--pages/mUser/pQrcode/pQrcode.wxml-->
+<web-view src="{{url}}"></web-view>
diff --git a/pages/mUser/pQrcode/pQrcode.wxss b/pages/mUser/pQrcode/pQrcode.wxss
new file mode 100644
index 0000000..485feae
--- /dev/null
+++ b/pages/mUser/pQrcode/pQrcode.wxss
@@ -0,0 +1 @@
+/* pages/mUser/pQrcode/pQrcode.wxss */
\ No newline at end of file
diff --git a/pages/mUser/pSupport/pSupport.js b/pages/mUser/pSupport/pSupport.js
new file mode 100644
index 0000000..c1a906e
--- /dev/null
+++ b/pages/mUser/pSupport/pSupport.js
@@ -0,0 +1,19 @@
+// pages/mUser/pSupport/pSupport.js
+import $f from "../../../service/baserequest"
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    qrcode: $f.baseIconUrl + 'support_qrcode-1.png'
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+})
\ No newline at end of file
diff --git a/pages/mUser/pSupport/pSupport.json b/pages/mUser/pSupport/pSupport.json
new file mode 100644
index 0000000..6551e73
--- /dev/null
+++ b/pages/mUser/pSupport/pSupport.json
@@ -0,0 +1,4 @@
+{
+  "navigationBarTitleText": "鎶�鏈敮鎸�",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mUser/pSupport/pSupport.wxml b/pages/mUser/pSupport/pSupport.wxml
new file mode 100644
index 0000000..70b59a7
--- /dev/null
+++ b/pages/mUser/pSupport/pSupport.wxml
@@ -0,0 +1,12 @@
+<!--pages/mUser/pSupport/pSupport.wxml-->
+<view class="page">
+  <view class="page__hd">
+    鎵弿涓嬫柟寰俊浜岀淮鐮佹坊鍔犳妧鏈挩璇�
+  </view>
+  <view class="page__bd">
+    <image show-menu-by-longpress="true" src="{{qrcode}}"></image>
+    <view>涓婃捣椋炵窘鐜繚绉戞妧鏈夐檺鍏徃</view>
+  </view>
+  <view class="page__ft">
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mUser/pSupport/pSupport.wxss b/pages/mUser/pSupport/pSupport.wxss
new file mode 100644
index 0000000..1b07dbc
--- /dev/null
+++ b/pages/mUser/pSupport/pSupport.wxss
@@ -0,0 +1,53 @@
+/* pages/mUser/pSupport/pSupport.wxss */
+.title:active {
+  background-color: var(--fyui-BG-COLOR-ACTIVE);
+}
+
+.fyui-cell_select {
+  font-size: 16px;
+  padding-top: 12px;
+  padding-bottom: 12px;
+  border-bottom: 1px solid rgb(238, 238, 238);
+}
+
+.page {
+  justify-content: space-between;
+  background-color: transparent;
+}
+
+.page__hd {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  height: 20vh;
+}
+
+.page__bd {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: flex-start;
+  height: 30vh;
+}
+
+.page__bd>image{
+  width: 56vw;
+  height: 56vw;
+}
+
+.page__bd>view{
+  font-size: 14px;
+  color: var(--fyui-text-color_2);
+  margin-top: 16px;
+}
+
+.page__bd{
+  flex: 1;
+  color: var(--fyui-text-color_1);
+}
+
+.page__ft{
+  font-size: 12px;
+  color: var(--fyui-text-color_3);
+}
\ No newline at end of file
diff --git a/pages/mUser/personalauthentication/personalauthentication.js b/pages/mUser/personalauthentication/personalauthentication.js
new file mode 100644
index 0000000..ad7b13b
--- /dev/null
+++ b/pages/mUser/personalauthentication/personalauthentication.js
@@ -0,0 +1,127 @@
+// pages/mUser/personalauthentication/personalauthentication.js
+import userservice from '../../../service/userservice'
+import authservice from '../../../service/authservice'
+import bInputCheck from '../../../base/behaviors/bInputCheck'
+import bLoadingToast from '../../../base/behaviors/bLoadingToast'
+
+const app = getApp()
+
+Page({
+  behaviors: [bInputCheck, bLoadingToast],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    idTypes: [
+      {value: '0', name: '韬唤璇�'},
+    ],
+    idTypeIndex: 0,
+    msg: [{
+        name: "濮撳悕",
+        id: "piName",
+        input: true,
+        value: '',
+        noValue: false,
+      },
+      {
+        name: "璇佷欢绫诲瀷",
+        id: "piIdType",
+        type: 'picker',
+        pickerMode: 'selector',
+        value: '',
+        noValue: false,
+        selectIndex: 0,
+        options: [
+          {name: '鏈�夋嫨', value: '-1'},
+          {name: '韬唤璇�', value: '0'},
+        ]
+      },
+      {
+        name: "璇佷欢缂栧彿",
+        id: "piId",
+        input: true,
+        value: "",
+        noValue: false,
+      },
+      {
+        name: "鑱屼綅",
+        id: "piPosition",
+        type: 'picker',
+        pickerMode: 'selector',
+        value: '',
+        noValue: false,
+        selectIndex: 0,
+        options: [
+          {name: '鏈�夋嫨', value: '-1'},
+          {name: '绠$悊鍛�', value: '0'},
+          {name: '鑱屽憳', value: '1'},
+        ]
+      },
+    ],
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    this.setData({
+      loadingText: '涓婁紶涓�',
+      loadCompleteText: '涓婁紶瀹屾垚'
+    })
+    this.getPersonalInfo()
+  },
+
+  changeIDType(e) {
+    let i = e.detail.value
+    this.setData({
+      idTypeIndex: i
+    })
+  },
+
+  getPersonalInfo() {
+    var that = this
+    userservice.getBaseInfo(app.globalData.accessToken.userId, {
+      success(data) {
+        const msg = that.data.msg
+        if (data.personalInfo != null) {
+          const info = data.personalInfo
+          msg[0].value = info.piName
+          msg[1].value = info.piIdType
+          for (let i = 0; i < msg[1].options.length; i++) {
+            const o = msg[1].options[i];
+            if (o.name == msg[1].value) {
+              msg[1].selectIndex = i
+              break
+            }
+          }
+          msg[2].value = info.piId
+          msg[3].value = info.piPosition
+          for (let i = 0; i < msg[3].options.length; i++) {
+            const o = msg[3].options[i];
+            if (o.name == msg[3].value) {
+              msg[3].selectIndex = i
+              break
+            }
+          }
+          that.setData({
+            msg, info
+          })
+        }
+      }
+    }, app.globalData.accessToken.openId)
+  },
+
+  //鎻愪氦涓汉淇℃伅
+  _submit() {
+    var that = this
+    this.setData({loading: true})
+    authservice.authPersonal(app.globalData.accessToken.openId, this.data.info, {
+      success(res) {
+        that.setData({loading: false})
+        wx.navigateBack({
+          delta: 1,
+        })
+      },
+    })
+  },
+})
\ No newline at end of file
diff --git a/pages/mUser/personalauthentication/personalauthentication.json b/pages/mUser/personalauthentication/personalauthentication.json
new file mode 100644
index 0000000..c681697
--- /dev/null
+++ b/pages/mUser/personalauthentication/personalauthentication.json
@@ -0,0 +1,10 @@
+{
+  "navigationBarTitleText": "涓汉淇℃伅璁よ瘉",
+  "usingComponents": {
+    "mp-cells":"/component/cells/cells",
+    "input-cell":"/component/inputcell/inputcell",
+    "mp-icon": "/component/icon/icon",
+    "mp-toptips":"/component/toptips/toptips",
+    "mp-upload":"/component/uploader/uploader"
+  }
+}
\ No newline at end of file
diff --git a/pages/mUser/personalauthentication/personalauthentication.wxml b/pages/mUser/personalauthentication/personalauthentication.wxml
new file mode 100644
index 0000000..f7656df
--- /dev/null
+++ b/pages/mUser/personalauthentication/personalauthentication.wxml
@@ -0,0 +1,42 @@
+<!--pages/mUser/personalauthentication/personalauthentication.wxml-->
+<mp-toptips type="error" msg="{{errorMsg}}" show="{{errorMsg}}" delay="2000"></mp-toptips>
+<view class="page">
+  <image class="banner-bg" src="/res/icons/companyinfo-1.png" mode="widthFix"></image>
+  <view class="tips">璇蜂粩缁嗘鏌ヤ互涓嬩俊鎭紝纭鏄惁姝g‘锛岃皟鏁村畬鎴愬悗鎻愪氦瀹屾垚璁よ瘉锛堝叾涓甫*鐨勪负蹇呭~椤癸紝鍏朵綑涓洪�夊~椤癸級</view>
+  <view class="page__bd">
+    <!-- <view class="top-card">
+    <view class="tag"><text style="color: transparent;">*</text>浼佷笟绫诲瀷</view>
+    <picker mode="selector" bindchange="changeSceneType" value="{{sceneTypeIndex}}" range="{{sceneTypes}}" range-key="name" class="value">
+      <view class="picker-text">{{sceneTypes[sceneTypeIndex].name}}</view>
+    </picker>
+    <mp-icon icon="arrow" color="#59D5B3" size="{{10}}"></mp-icon>
+  </view> -->
+    <view class="items">
+      <mp-cells>
+        <block wx:for="{{msg}}" wx:key="index">
+        <block wx:if="{{item.type == 'picker'}}">
+          <view class="hr-view"></view>
+          <view class="top-card">
+            <view id="{{item.id}}" class="tag"><text class="{{item.required != false ? 'required' : 'not-required'}}">*</text>{{item.name}}</view>
+            <picker wx:if="{{item.pickerMode == 'selector'}}" mode="selector" bindchange="pickerChange" data-index="{{index}}" data-mode="selector" value="{{item.selectIndex}}" range="{{item.options}}" range-key="name" class="value">
+              <view class="picker-text">{{item.options[item.selectIndex].name}}</view>
+            </picker>
+            <picker wx:elif="{{item.pickerMode == 'region'}}" mode="region" bindchange="pickerChange" data-index="{{index}}" data-mode="region" value="{{item.displayValue}}" class="value" level="sub-district" custom-item="绌�">
+              <view class="picker-text" wx:if="{{item.value.length > 0}}">{{item.value[0] + (item.value[1] == item.value[0] ? '' : item.value[1]) + item.value[2] + item.value[3]}}</view>
+              <view wx:else class="picker-text" style="color: #B2B2B2;">璇烽�夋嫨琛楅晣</view>
+            </picker>
+            <mp-icon icon="arrow" color="black" size="{{10}}"></mp-icon>
+          </view>
+        </block>
+        <input-cell id="{{item.id}}" wx:else item="{{item}}" bindpassValue="changeMsg"></input-cell>
+      </block>
+      </mp-cells>
+    </view>
+    <!-- <view class="weui-upload-view">
+      <mp-upload title="涓婁紶钀ヤ笟鎵х収" titleClass="upload-title-class" max-count="1" files="{{imgFiles}}" binduploadImg="uploadFile" binddelete="delImg"></mp-upload>
+    </view> -->
+  </view>
+  <view class="page__ft">
+    <view class="submit" bindtap="onSubmit">涓婁紶</view>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mUser/personalauthentication/personalauthentication.wxss b/pages/mUser/personalauthentication/personalauthentication.wxss
new file mode 100644
index 0000000..51fb316
--- /dev/null
+++ b/pages/mUser/personalauthentication/personalauthentication.wxss
@@ -0,0 +1,77 @@
+/* pages/mUser/personalauthentication/personalauthentication.wxss */
+.tips {
+  position: relative;
+  color: white;
+  padding: 16px;
+  font-size: 14px;
+  font-weight: 550;
+}
+
+.banner-bg {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 0;
+  /* background-color: aqua; */
+}
+
+.top-card {
+  position: relative;
+  display: flex;
+  flex-direction: row;
+  background-color: white;
+  border-top-left-radius: 8px;
+  border-top-right-radius: 8px;
+  padding: 8px 0px;
+  /* margin: 0 8px; */
+  font-size: 16px;
+}
+
+.picker-text {
+  /* color: var(--fyui-primary-color); */
+  color: var(--fyui-text-color_1);
+}
+
+.items {
+  position: relative;
+  padding: 0 16px;
+  background-color: white;
+}
+
+.top-card .tag {
+  /* display: inline-block; */
+  width: 32vw;
+  white-space: nowrap;
+}
+
+.top-card .value {
+  flex-grow: 1;
+}
+
+.top-card .value view {
+  max-width: 200px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.weui-upload-view {
+  background-color: white;
+  padding: 16px;
+}
+
+.page__ft {
+  background-color: white;
+}
+
+.required {
+  color: red;
+  text-align: center;
+  vertical-align: middle;
+}
+
+.not-required {
+  color: transparent;
+}
\ No newline at end of file
diff --git a/pages/mUser/sceneauthentication/sceneauthentication.js b/pages/mUser/sceneauthentication/sceneauthentication.js
new file mode 100644
index 0000000..8a75ed4
--- /dev/null
+++ b/pages/mUser/sceneauthentication/sceneauthentication.js
@@ -0,0 +1,36 @@
+// pages/mUser/sceneauthentication/sceneauthentication.js
+
+
+const app = getApp()
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+    this.setData({
+      sceneType: app.globalData.userInfo.extension2
+    })
+    this.getOpenerEventChannel().on('acceptDataFromOpenerPage', (data) => {
+      this.setData({
+        authStatus: data.authStatus
+      })
+    })
+  },
+
+  
+
+  onSubmit(e) {
+    console.log(e);
+    const info = e.detail
+
+  }
+})
\ No newline at end of file
diff --git a/pages/mUser/sceneauthentication/sceneauthentication.json b/pages/mUser/sceneauthentication/sceneauthentication.json
new file mode 100644
index 0000000..032a67a
--- /dev/null
+++ b/pages/mUser/sceneauthentication/sceneauthentication.json
@@ -0,0 +1,6 @@
+{
+  "navigationBarTitleText": "搴楅摵淇℃伅璁よ瘉",
+  "usingComponents": {
+    "c-scene-info": "../baseC/cSceneInfo/cSceneInfo"
+  }
+}
\ No newline at end of file
diff --git a/pages/mUser/sceneauthentication/sceneauthentication.wxml b/pages/mUser/sceneauthentication/sceneauthentication.wxml
new file mode 100644
index 0000000..a217bf1
--- /dev/null
+++ b/pages/mUser/sceneauthentication/sceneauthentication.wxml
@@ -0,0 +1,7 @@
+<!--pages/mUser/sceneauthentication/sceneauthentication.wxml-->
+<view class="page">
+  <image class="banner-bg" src="/res/icons/companyinfo-1.png" mode="widthFix"></image>
+  <view class="tips">璇蜂粩缁嗘鏌ヤ互涓嬩俊鎭紝纭鏄惁姝g‘锛岃皟鏁村畬鎴愬悗鎻愪氦瀹屾垚璁よ瘉锛堝叾涓甫*鐨勪负蹇呭~椤癸紝鍏朵綑涓洪�夊~椤癸級</view>
+  <c-scene-info sceneType="{{sceneType}}" bindonSubmit="onSubmit"></c-scene-info>
+</view>
+
diff --git a/pages/mUser/sceneauthentication/sceneauthentication.wxss b/pages/mUser/sceneauthentication/sceneauthentication.wxss
new file mode 100644
index 0000000..fbb27d7
--- /dev/null
+++ b/pages/mUser/sceneauthentication/sceneauthentication.wxss
@@ -0,0 +1,18 @@
+/* pages/mUser/sceneauthentication/sceneauthentication.wxss */
+.tips {
+  position: relative;
+  color: white;
+  padding: 16px;
+  font-size: 14px;
+  font-weight: 550;
+}
+
+.banner-bg {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  z-index: 0;
+  /* background-color: aqua; */
+}
\ No newline at end of file
diff --git a/pages/mUser/userlogin/userlogin.js b/pages/mUser/userlogin/userlogin.js
new file mode 100644
index 0000000..fa5d547
--- /dev/null
+++ b/pages/mUser/userlogin/userlogin.js
@@ -0,0 +1,194 @@
+// pages/mUser/userlogin/userlogin.js
+// import bLogin from '../behaviors/bLogin'
+// import $f from "../../../service/baserequest"
+
+const bLogin = require('../behaviors/bLogin')
+const $f = require("../../../service/baserequest")
+const app = getApp()
+
+Page({
+  behaviors: [bLogin],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    bgPath: $f.baseIconUrl + 'userlogin-1.png',
+    agree: false,
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad: function (options) {
+    wx.getStorage({
+      key: 'agree',
+      success: (res) => {
+        this.setData({
+          agree: res.data
+        })
+      }
+    })
+    wx.getStorage({
+      key: 'userProfile',
+      success: (res) => {
+        this.setData({
+          userProfile: res.data
+        })
+      },
+    })
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady: function () {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow: function () {
+
+  },
+
+  loginWx() {
+    var that = this
+    if (!this.waitAgree()) return
+    if (app.globalData.userProfile) {
+      wx.requestSubscribeMessage({
+        tmplIds: [
+          '6JQFOJ12yBvKfRg_duSdwKiH5_J3LpICmz3Li-L1Cr8',
+          'zPNMzF5WsshniJyl83DD-lDZtNvx7JyqLbKgqDl0qvU',
+          'dqREi7vAd03OOirTgBGcm5aCihZJKBjVpiA8Kbu4B8w'
+        ],
+        success(res) {
+          console.log(res);
+        },
+        fail(e) {
+          console.log(e);
+        },
+        complete() {
+          that.loginPw(app.globalData.userProfile)
+        }
+      })
+    } else {
+      wx.getUserProfile({
+        lang: 'zh_CN',
+        desc: '鐢ㄤ簬鏄剧ず锛屾彁绀虹敤鎴峰綋鍓嶅凡鐧诲綍',
+        success: (res) => {
+          console.log(res);
+          wx.setStorage({
+            data: res.userInfo,
+            key: 'userProfile',
+          })
+          this.loginPw(res.userInfo)
+        },
+        complete() {
+          wx.requestSubscribeMessage({
+            tmplIds: [
+              '6JQFOJ12yBvKfRg_duSdwKiH5_J3LpICmz3Li-L1Cr8',
+              'zPNMzF5WsshniJyl83DD-lDZtNvx7JyqLbKgqDl0qvU',
+              'dqREi7vAd03OOirTgBGcm5aCihZJKBjVpiA8Kbu4B8w'
+            ],
+            success(res) {
+              console.log(res);
+            },
+            fail(e) {
+              console.log(e);
+            },
+            complete() {
+            }
+          })
+        }
+      })
+    }
+
+
+  },
+
+  _onLoginFail(e) {
+    this.gotoLogin(function () {
+      wx.showToast({
+        title: '鏈粦瀹氳处鍙�',
+        duration: 1000,
+        icon: 'none',
+      })
+    })
+  },
+
+  gotoLogin(toast) {
+    if (!this.waitAgree()) return
+    wx.requestSubscribeMessage({
+      tmplIds: [
+        '6JQFOJ12yBvKfRg_duSdwKiH5_J3LpICmz3Li-L1Cr8',
+        'zPNMzF5WsshniJyl83DD-lDZtNvx7JyqLbKgqDl0qvU',
+        'dqREi7vAd03OOirTgBGcm5aCihZJKBjVpiA8Kbu4B8w'
+      ],
+      success(res) {
+        console.log(res);
+      },
+      fail(e) {
+        console.log(e);
+      },
+      complete() {
+        wx.navigateTo({
+          url: '/pages/mUser/userloginpw/userloginpw',
+          success: (result) => {
+            if (typeof toast === 'function') {
+              toast()
+            }
+          },
+          fail: (res) => {},
+          complete: (res) => {},
+        })
+      }
+    })
+  },
+
+  checkboxChange(e) {
+    var a = !this.data.agree
+    this.setData({
+      agree: a
+    })
+    wx.setStorage({
+      key: 'agree',
+      data: a
+    })
+  },
+
+  waitAgree() {
+    if (this.data.agree) {
+      return true
+    } else {
+      wx.showToast({
+        title: '闃呰骞跺悓鎰忔潯娆�',
+        icon: 'none'
+      })
+      return false
+    }
+  },
+
+  gotoAgreement() {
+    wx.showLoading({
+      title: ' 鎵撳紑涓�',
+      mask: true,
+    })
+    wx.downloadFile({
+      url: app.globalData.agreement,
+      success: function (res) {
+        wx.hideLoading()
+        const filePath = res.tempFilePath
+        wx.openDocument({
+          filePath: filePath,
+          success: function (res) {
+            console.log('鎵撳紑鏂囨。鎴愬姛')
+          },
+          fail(error) {
+            console.log(error);
+          }
+        })
+      }
+    })
+  }
+})
\ No newline at end of file
diff --git a/pages/m_user/userregistergov/userregistergov.json b/pages/mUser/userlogin/userlogin.json
similarity index 100%
copy from pages/m_user/userregistergov/userregistergov.json
copy to pages/mUser/userlogin/userlogin.json
diff --git a/pages/mUser/userlogin/userlogin.wxml b/pages/mUser/userlogin/userlogin.wxml
new file mode 100644
index 0000000..62ccab7
--- /dev/null
+++ b/pages/mUser/userlogin/userlogin.wxml
@@ -0,0 +1,24 @@
+<!--pages/mUser/userlogin/userlogin.wxml-->
+<view class="page">
+  <view class="page__bd">
+    <image class="banner-bg" src="{{bgPath}}"></image>
+    <view class="login-btn">
+      <view class="submit" bindtap="loginWx">寰俊鐢ㄦ埛涓�閿櫥褰�</view>
+      <view class="login-btn_text" bindtap="gotoLogin">璐﹀彿瀵嗙爜鐧诲綍/娉ㄥ唽</view>
+    </view>
+    <view class="weui-agree">
+      <label bindtap="checkboxChange">
+        <checkbox class="weui-agree__checkbox-check" value="{{agree}}" checked="{{agree}}" />
+        <span class="weui-agree__checkbox"></span>
+        <span class="weui-agree__text">闃呰骞跺悓鎰�</span>
+      </label>
+      <span class="weui-agree__text"><text bindtap="gotoAgreement">銆婁腑灏忓井浼佷笟鐢熸�佺幆澧冨畧娉曟櫤鑳芥湇鍔$敤鎴锋潯娆俱��</text>
+        <!-- 鍙�<text>銆婇殣绉佹潯娆俱��</text> -->
+      </span>
+    </view>
+  </view>
+  <view class="page__ft">
+    <view>涓氬姟鎸囧锛氫笂娴峰競鐢熸�佺幆澧冨眬鎵ф硶鎬婚槦</view>
+    <view>鎶�鏈敮鎸侊細涓婃捣椋炵窘鐜繚绉戞妧鏈夐檺鍏徃</view>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mUser/userlogin/userlogin.wxss b/pages/mUser/userlogin/userlogin.wxss
new file mode 100644
index 0000000..b564d5b
--- /dev/null
+++ b/pages/mUser/userlogin/userlogin.wxss
@@ -0,0 +1,52 @@
+/* pages/mUser/userlogin/userlogin.wxss */
+.banner-bg {
+  z-index: -1;
+  position: fixed;
+  top: 0;
+  width: 100%;
+  height: 100%;
+  /* background-color: aqua; */
+}
+
+.login-btn {
+  margin-top: 50vh;
+  text-align: center;
+}
+
+.login-btn_text {
+  /* color: #2F655B; */
+  color: #0f1f1c;
+}
+
+.login-btn_text:active {
+  color: #2f655b71;
+}
+
+.weui-agree {
+  margin-top: 50px;
+  /* font-size: 14px; */
+}
+
+.weui-agree__text>text {
+  color: var(--fyui-primary-color);
+}
+
+.page {
+  justify-content: space-between;
+  background-color: transparent;
+}
+
+.page__bd{
+  flex: 1;
+  color: var(--fyui-text-color_1);
+}
+
+.page__ft{
+  font-size: 12px;
+  color: var(--fyui-text-color_3);
+}
+
+/* .weui-agree__checkbox-check[aria-checked=true]+.weui-agree__checkbox,
+.weui-agree__checkbox:checked {
+  color: rgba(0, 0, 0, 0.589);
+} */
\ No newline at end of file
diff --git a/pages/mUser/userloginpw/userloginpw.js b/pages/mUser/userloginpw/userloginpw.js
new file mode 100644
index 0000000..3a1efb3
--- /dev/null
+++ b/pages/mUser/userloginpw/userloginpw.js
@@ -0,0 +1,151 @@
+// pages/mUser/userloginpw/userloginpw.js
+import bLogin from '../behaviors/bLogin'
+
+const app = getApp()
+
+Page({
+  behaviors: [bLogin],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    userName: "",
+    password: "",
+    loading: false
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  onReady() {
+    var that = this
+    //鑾峰彇缂撳瓨鐨勭敤鎴疯处鎴峰瘑鐮�
+    wx.getStorage({
+      key: 'accessToken',
+      success(res) {
+        app.globalData.accessToken = res.data
+        that.setData({
+          userName: res.data.userName,
+          password: res.data.password
+        })
+      },
+    })
+  },
+
+  inputUserName(e) {
+    this.setData({
+      userName: e.detail.value
+    });
+  },
+
+  inputPassword(e) {
+    this.setData({
+      password: e.detail.value
+    });
+  },
+
+  login() {
+    if (this.data.userName == '') {
+      wx.showToast({
+        title: '璇疯緭鍏ヨ处鎴�',
+        icon: 'none'
+      })
+      return
+    }
+    if (this.data.password == '') {
+      wx.showToast({
+        title: '璇疯緭鍏ュ瘑鐮�',
+        icon: 'none'
+      })
+      return
+    }
+    this.setData({
+      loading: true
+    })
+    // userservice.login(this.data.userName, this.data.password, {
+    //   success (data) {
+    //     if (data.success) {
+    //       app.globalData.accessToken = {
+    //         userName: that.data.userName,
+    //         password: that.data.password,
+    //         userId: data.userId,
+    //         suserId: data.suserId,
+    //       }
+    //       wx.setStorage({
+    //         key: 'accessToken',
+    //         data: app.globalData.accessToken,
+    //       })
+    //       that.getUserInfo()
+    //     } else {
+    //       wx.showToast({
+    //         title: '璐︽埛鎴栧瘑鐮侀敊璇�',
+    //         duration: 1000,
+    //         icon: 'none',
+    //       })
+    //     }
+    //   },
+    //   complete () {
+    //     that.setData({
+    //       loading: false
+    //     })
+    //   }
+    // })
+    if (app.globalData.userProfile) {
+      app.globalData.userProfile.userName = this.data.userName
+      app.globalData.userProfile.password = this.data.password
+      this.loginPw(app.globalData.userProfile)
+    } else {
+      wx.getUserProfile({
+        lang: 'zh_CN',
+        desc: '鐢ㄤ簬鏄剧ず锛屾彁绀虹敤鎴峰綋鍓嶅凡鐧诲綍',
+        success:(res)=> {
+          console.log(res);
+          wx.setStorage({
+            data: res.userInfo,
+            key: 'userProfile',
+          })
+          const token = res.userInfo
+          token.userName = this.data.userName
+          token.password = this.data.password
+          this.loginPw(token)
+        },
+        fail:(e)=>{
+
+        },
+        complete:()=>{
+
+        },
+      })
+    }
+    
+  },
+
+  _onLoginFail(e) {
+    wx.showToast({
+      title: '璐︽埛鎴栧瘑鐮侀敊璇�',
+      duration: 2000,
+      icon: 'none',
+    })
+  },
+
+  gotoRegister() {
+    wx.showToast({
+      title: '鏆備笉寮�鏀炬敞鍐�',
+      duration: 1000,
+      icon: 'error',
+      success: (res) => {},
+      fail: (res) => {},
+      complete: (res) => {},
+    })
+    // wx.navigateTo({
+    //   url: '/pages/mUser/userregistertype/userregistertype',
+    //   success: (result) => {},
+    //   fail: (res) => {},
+    //   complete: (res) => {},
+    // })
+  }
+})
\ No newline at end of file
diff --git a/pages/m_user/userloginpw/userloginpw.json b/pages/mUser/userloginpw/userloginpw.json
similarity index 100%
rename from pages/m_user/userloginpw/userloginpw.json
rename to pages/mUser/userloginpw/userloginpw.json
diff --git a/pages/mUser/userloginpw/userloginpw.wxml b/pages/mUser/userloginpw/userloginpw.wxml
new file mode 100644
index 0000000..8df922a
--- /dev/null
+++ b/pages/mUser/userloginpw/userloginpw.wxml
@@ -0,0 +1,29 @@
+<!--pages/mUser/userloginpw/userloginpw.wxml-->
+<view class="page">
+  <view class="login-container">
+    <view class="user-info">
+      <view class="user-info_item">
+        <text>璐﹀彿锛�</text>
+        <input type="text" placeholder="璇疯緭鍏ヨ处鍙�" value="{{userName}}" bindinput="inputUserName" />
+      </view>
+      <view class="user-info_item">
+        <text>瀵嗙爜锛�</text>
+        <input type="password" placeholder="璇疯緭鍏ュ瘑鐮�" value="{{password}}" bindinput="inputPassword" />
+      </view>
+    </view>
+    <button class="bottom-btn {{password.length > 0 ? 'bottom-btn_active' : ''}}" bindtap="login" loading="{{loading}}" disabled="{{password.length == 0}}">
+      鐧诲綍
+    </button>
+    <view class="login-btn_text" style="color: gray;" bindtap="gotoRegister">鍘绘敞鍐�</view>
+    <!-- <view>
+      <label class="weui-agree" bindtap="checkboxChange">
+        <checkbox class="weui-agree__checkbox-check" value="agree" checked="{{agree}}"/>
+        <span class="weui-agree__checkbox"></span>
+        <span class="weui-agree__text">闃呰骞跺悓鎰忎互涓嬭鏄�</span>
+      </label>
+    </view>
+    <view>
+      <view class="agree-text">鏈皬绋嬪簭鐢ㄤ簬浼佷笟姹℃按鎶借繍璁板綍涓婃姤锛岃鐢ㄦ埛鐭ユ倝</view>
+    </view> -->
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mUser/userloginpw/userloginpw.wxss b/pages/mUser/userloginpw/userloginpw.wxss
new file mode 100644
index 0000000..3043dc3
--- /dev/null
+++ b/pages/mUser/userloginpw/userloginpw.wxss
@@ -0,0 +1,70 @@
+/* pages/mUser/userloginpw/userloginpw.wxss */
+.login-container{
+  display: flex;
+  flex-direction: column;
+  justify-content: flex-start;
+  align-items: center;
+  height: 100vh;
+  z-index: 1;
+  background-color: white;
+}
+
+.bottom-btn{
+  width: 90% !important;
+  color: #828282;
+  background-color: #EEEEEE;
+  margin-top: 80px;
+}
+
+.bottom-btn_active {
+  color: white;
+  background: linear-gradient(to right, #6DF1A9, #62EBCF);
+}
+
+
+.agree-text {
+  width: 70vw;
+  text-align: center;
+  font-size: 12px;
+  color: #b8b8b8;
+  margin-top: 12rpx;
+}
+
+.user-info {
+  font-size: 20px;
+  width: 100%;
+  /* background-color: burlywood; */
+  margin-top: 30px;
+}
+.user-info_item {
+  display: flex;
+  justify-content: flex-start;
+  align-items: flex-start;
+  margin-bottom: 8px;
+  padding: 8px 30px;
+}
+
+.user-info_item>text{
+  color: var(--fyui-text-color_1);
+  line-height: 30px;
+  white-space: nowrap;
+  font-weight: 600;
+}
+
+.user-info_item>input{
+  height: 30px;
+  line-height: 30px;
+  width: 100%;
+  border-bottom: #929292 1px solid;
+  background-color: white;
+  font-size: medium;
+}
+
+.login-btn_text {
+  margin-top: 24px;
+  color: #2F655B;
+}
+
+.login-btn_text:active {
+  color: #2f655b71;
+}
\ No newline at end of file
diff --git a/pages/mUser/userregistercompany/userregistercompany.js b/pages/mUser/userregistercompany/userregistercompany.js
new file mode 100644
index 0000000..7b6bd13
--- /dev/null
+++ b/pages/mUser/userregistercompany/userregistercompany.js
@@ -0,0 +1,249 @@
+// pages/mUser/userregistercompany/userregistercompany.js
+const userservice = require("../../../service/userservice")
+const app = getApp()
+
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    sceneTypes: [
+      {value: '1', name: '椁愰ギ'},
+      {value: '7', name: '姹戒慨'},
+      {value: '6', name: '宸ヤ笟浼佷笟' },
+      {value: '2', name: '宸ュ湴'},
+      {value: '3', name: '鐮佸ご'},
+      {value: '4', name: '鍫嗗満'},
+      {value: '5', name: '鎼呮媽绔�' },
+    ],
+    sceneTypeIndex: 0,
+
+    imgFiles: [],
+
+    msg: [{
+        name: "鐢ㄦ埛鍚嶇О",
+        id: "username",
+        input: true,
+        value: "",
+        noValue: false,
+      },
+      {
+        name: "鏂板瘑鐮�",
+        id: "password",
+        input: true,
+        type: 'password',
+        maxLength: 20,
+        value: "",
+        noValue: false
+      },
+      {
+        name: "纭瀵嗙爜",
+        id: "number",
+        input: true,
+        type: 'password',
+        placeholder: '璇峰啀娆$‘璁ゅ瘑鐮�',
+        maxLength: 20,
+        value: "",
+        noValue: false,
+      },
+      {
+        name: "浼佷笟鍚嶇О",
+        id: "department",
+        input: true,
+        value: '',
+        noValue: false,
+      },
+      {
+        name: "浼佷笟鍦板潃",
+        id: "address",
+        input: true,
+        value: '',
+        noValue: false,
+      },
+      {
+        name: "鑱旂郴鏂瑰紡",
+        id: "contract",
+        input: true,
+        value: '',
+        noValue: false,
+        required: false
+      },
+      {
+        name: "淇$敤浠g爜",
+        id: "code",
+        input: true,
+        value: "",
+        noValue: false,
+        required: false
+      },
+    ],
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  changeSceneType(e) {
+    let i = e.detail.value
+    this.setData({
+      sceneTypeIndex: i
+    })
+  },
+
+  changeMsg(e) {
+    let id = e.detail.params.id
+    let value = e.detail.params.value
+    let msg = this.data.msg
+    let msgLength = msg.length
+    for (let i = 0; i < msgLength; i++) {
+      if (msg[i].id === id) {
+        let path = "msg[" + i + "].value"
+        let nPath = "msg[" + i + "].noValue"
+        this.setData({
+          [path]: value,
+          [nPath]: false
+        })
+      }
+    }
+  },
+
+  uploadFile(file) {
+    let data = file.detail.newFiles
+    data.forEach(element => {
+      element.loading = false
+    });
+    this.setData({
+      imgFiles: data
+    })
+  },
+
+  onSubmit: function () {
+    if (!this.submitCheck()) return
+
+    let msg = this.data.msg
+    let info = {
+      sceneType: this.data.sceneTypes[this.data.sceneTypeIndex].value,
+      userName: msg[0].value,
+      password: msg[1].value,
+      department: msg[3].value,
+      address: msg[4].value,
+      telephone: msg[5].value,
+      orgCode: msg[6].value
+    }
+
+    wx.showLoading({
+      title: '娉ㄥ唽涓�',
+      mask: true,
+    })
+    setTimeout(() => {
+      wx.hideLoading()
+    }, 10000);
+    var that = this
+    userservice.register(info, {
+      success(res) {
+        if (res.success) {
+          app.globalData.accessToken = {
+            userId: res.userId,
+            suserId: res.suserId,
+          }
+          that.getUserInfo()
+        } else {
+          wx.hideLoading({
+            success: (res) => {
+              wx.showToast({
+                title: '鐢ㄦ埛鍚嶇О閲嶅',
+                duration: 2000,
+                icon: 'error',
+                mask: true,
+              })
+            },
+            fail: (res) => {},
+            complete: (res) => {},
+          })
+        }
+      }
+    })
+  },
+
+  /**
+   * 淇℃伅瀹屾暣搴︽鏌�
+   */
+  submitCheck() {
+    let msg = this.data.msg
+    let msgLength = msg.length
+    //纭淇℃伅瀹屾暣搴�
+    for (let i = 0; i < msgLength; i++) {
+      if (msg[i].required != false && msg[i].value === "") {
+        let error = msg[i].name + "涓嶅彲涓虹┖"
+        let path = "msg[" + i + "].noValue"
+        this.setData({
+          errorMsg: error,
+          [path]: true
+        })
+
+        wx.pageScrollTo({
+          duration: 300,
+          scrollTop: 0,
+          // selector:"#" + msg[i].id,
+        })
+        return false
+      }
+    }
+
+    //瀵嗙爜涓�鑷存�х‘璁�
+    if (msg[1].value != msg[2].value) {
+      let error = "涓ゆ杈撳叆鐨勫瘑鐮佷笉涓�鑷�"
+      this.setData({
+        errorMsg: error,
+      })
+      return false
+    }
+    //瀵嗙爜澶嶆潅搴︾‘璁�
+    var pwError
+    var pw = msg[1].value
+    var regex1 = /[a-zA-Z]/
+    var regex2 = /[0-9]/
+    var r = regex1.test(pw) && regex2.test(pw)
+    console.log('regex:' + r);
+    if (pw.length < 6) {
+      pwError = '瀵嗙爜浣嶆暟鏈�灏�6浣�'
+    } else if (!r) {
+      pwError = '瀵嗙爜蹇呴』鍖呭惈瀛楁瘝鍜屾暟瀛�'
+    }
+    if (pwError) {
+      this.setData({
+        errorMsg: pwError,
+      })
+      return false
+    }
+
+    return true
+  },
+
+  getUserInfo() {
+    userservice.getUserInfo(app.globalData.accessToken.userId, {
+      success(data) {
+        app.globalData.accessToken.userName = data.acountname
+        app.globalData.accessToken.password = data.acountname
+        wx.setStorage({
+          key: 'accessToken',
+          data: app.globalData.accessToken,
+        })
+        app.globalData.userInfo = data
+        wx.setStorage({
+          key: 'userInfo',
+          data: data,
+          success: (result) => {
+            wx.switchTab({
+              url: '/pages/home/home',
+            })
+          }
+        })
+      }
+    })
+  },
+})
\ No newline at end of file
diff --git a/pages/mUser/userregistercompany/userregistercompany.json b/pages/mUser/userregistercompany/userregistercompany.json
new file mode 100644
index 0000000..6ea54dc
--- /dev/null
+++ b/pages/mUser/userregistercompany/userregistercompany.json
@@ -0,0 +1,11 @@
+{
+  "navigationBarTitleText": "浼佷笟璐︽埛娉ㄥ唽",
+  "usingComponents": {
+    "mp-cells":"/component/cells/cells",
+    "mp-cell":"/component/cell/cell",
+    "input-cell":"/component/inputcell/inputcell",
+    "mp-toptips":"/component/toptips/toptips",
+    "mp-icon": "/component/icon/icon",
+    "mp-upload":"/component/uploader/uploader"
+  }
+}
\ No newline at end of file
diff --git a/pages/mUser/userregistercompany/userregistercompany.wxml b/pages/mUser/userregistercompany/userregistercompany.wxml
new file mode 100644
index 0000000..6133573
--- /dev/null
+++ b/pages/mUser/userregistercompany/userregistercompany.wxml
@@ -0,0 +1,27 @@
+<!--pages/mUser/userregistercompany/userregistercompany.wxml-->
+<view class="page">
+  <mp-toptips type="error" msg="{{errorMsg}}" show="{{errorMsg}}" delay="2000"></mp-toptips>
+
+  <view class="page__bd">
+    <view class="top-card">
+      <view class="tag"><text style="color: transparent;">*</text>浼佷笟绫诲瀷</view>
+      <picker mode="selector" bindchange="changeSceneType" value="{{sceneTypeIndex}}" range="{{sceneTypes}}" range-key="name" class="value">
+        <view>{{sceneTypes[sceneTypeIndex].name}}</view>
+      </picker>
+      <mp-icon icon="arrow" color="#7F7F7F" size="{{10}}"></mp-icon>
+    </view>
+
+    <view class="items">
+      <mp-cells>
+        <input-cell wx:for="{{msg}}" wx:key="id" item="{{item}}" bindpassValue="changeMsg"></input-cell>
+      </mp-cells>
+    </view>
+
+    <view class="weui-upload-view">
+      <mp-upload title="涓婁紶钀ヤ笟鎵х収" titleClass="upload-title-class" max-count="1" files="{{imgFiles}}" binduploadImg="uploadFile" binddelete="delImg"></mp-upload>
+    </view>
+  </view>
+  <view class="page__ft">
+    <view class="submit" bindtap="onSubmit">鎻愪氦</view>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mUser/userregistercompany/userregistercompany.wxss b/pages/mUser/userregistercompany/userregistercompany.wxss
new file mode 100644
index 0000000..177f7bf
--- /dev/null
+++ b/pages/mUser/userregistercompany/userregistercompany.wxss
@@ -0,0 +1,43 @@
+/* pages/mUser/userregistercompany/userregistercompany.wxss */
+.top-card {
+  /* position: relative; */
+  display: flex;
+  flex-direction: row;
+  background-color: white;
+  border-radius: 4px;
+  /* margin: 0px 8px 8px 8px; */
+  margin-top: 8px;
+  padding: 8px;
+  font-size: 16px;
+}
+
+.items {
+  padding: 0 8px;
+  background-color: white;
+}
+
+.top-card .tag {
+  /* display: inline-block; */
+  width: 105px;
+  white-space: nowrap;
+}
+
+.top-card .value {
+  flex-grow: 1;
+}
+
+.top-card .value view {
+  max-width: 200px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.weui-upload-view {
+  background-color: white;
+  padding: 8px;
+}
+
+.page__ft {
+  background-color: white;
+}
\ No newline at end of file
diff --git a/pages/mUser/userregistergov/userregistergov.js b/pages/mUser/userregistergov/userregistergov.js
new file mode 100644
index 0000000..021d9ae
--- /dev/null
+++ b/pages/mUser/userregistergov/userregistergov.js
@@ -0,0 +1,17 @@
+// pages/mUser/userregistergov/userregistergov.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+})
\ No newline at end of file
diff --git a/pages/m_user/userregistergov/userregistergov.json b/pages/mUser/userregistergov/userregistergov.json
similarity index 100%
rename from pages/m_user/userregistergov/userregistergov.json
rename to pages/mUser/userregistergov/userregistergov.json
diff --git a/pages/mUser/userregistergov/userregistergov.wxml b/pages/mUser/userregistergov/userregistergov.wxml
new file mode 100644
index 0000000..2a65006
--- /dev/null
+++ b/pages/mUser/userregistergov/userregistergov.wxml
@@ -0,0 +1,2 @@
+<!--pages/mUser/userregistergov/userregistergov.wxml-->
+<text>pages/mUser/userregistergov/userregistergov.wxml</text>
diff --git a/pages/mUser/userregistergov/userregistergov.wxss b/pages/mUser/userregistergov/userregistergov.wxss
new file mode 100644
index 0000000..b10223e
--- /dev/null
+++ b/pages/mUser/userregistergov/userregistergov.wxss
@@ -0,0 +1 @@
+/* pages/mUser/userregistergov/userregistergov.wxss */
\ No newline at end of file
diff --git a/pages/mUser/userregistertype/userregistertype.js b/pages/mUser/userregistertype/userregistertype.js
new file mode 100644
index 0000000..da7e0e8
--- /dev/null
+++ b/pages/mUser/userregistertype/userregistertype.js
@@ -0,0 +1,35 @@
+// pages/mUser/userregistertype/userregistertype.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  gotoRegisterInfo(e) {
+    let index = e.currentTarget.dataset.index
+    let url = ""
+    switch(index) {
+      case "0":
+        url = `/pages/mUser/userregistercompany/userregistercompany`
+        break;
+      case "1":
+        url = `/pages/mUser/userregistergov/userregistergov`
+        break;
+    }
+    if (url != "") {
+      wx.navigateTo({
+        url: url
+      })
+    }
+  }
+})
\ No newline at end of file
diff --git a/pages/m_user/userregistertype/userregistertype.json b/pages/mUser/userregistertype/userregistertype.json
similarity index 100%
rename from pages/m_user/userregistertype/userregistertype.json
rename to pages/mUser/userregistertype/userregistertype.json
diff --git a/pages/mUser/userregistertype/userregistertype.wxml b/pages/mUser/userregistertype/userregistertype.wxml
new file mode 100644
index 0000000..ea6b143
--- /dev/null
+++ b/pages/mUser/userregistertype/userregistertype.wxml
@@ -0,0 +1,13 @@
+<!--pages/mUser/userregistertype/userregistertype.wxml-->
+<view>
+  <view class="text-1">鎮ㄨ娉ㄥ唽锛�</view>
+  <view class="re-type" bindtap="gotoRegisterInfo" data-index="0">
+    <image src="/res/icons/re_company.png"></image>
+    <view>浼佷笟璐︽埛</view>
+  </view>
+  <view class="divider"></view>
+  <view class="re-type" bindtap="gotoRegisterInfo" data-index="0">
+    <image src="/res/icons/re_manage.png"></image>
+    <view>绠$悊璐︽埛</view>
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mUser/userregistertype/userregistertype.wxss b/pages/mUser/userregistertype/userregistertype.wxss
new file mode 100644
index 0000000..dab8d88
--- /dev/null
+++ b/pages/mUser/userregistertype/userregistertype.wxss
@@ -0,0 +1,28 @@
+/* pages/mUser/userregistertype/userregistertype.wxss */
+.text-1 {
+  text-align: center;
+  color: var(--fyui-text-color_1);
+  font-weight: 600;
+  font-size: 18px;
+}
+
+.re-type {
+  text-align: center;
+  margin: 60px;
+}
+
+.re-type:active {
+  color: var(--fyui-text-color_3);
+}
+
+.re-type>image {
+  width: 120px;
+  height: 120px;
+}
+
+.divider {
+  margin: 20px;
+  width: auto;
+  height: 1px;
+  background-color: var(--fyui-BG_1);
+}
\ No newline at end of file
diff --git a/pages/m_assessment/gradereport/gradereport.js b/pages/m_assessment/gradereport/gradereport.js
index 23db2f7..2645666 100644
--- a/pages/m_assessment/gradereport/gradereport.js
+++ b/pages/m_assessment/gradereport/gradereport.js
@@ -282,7 +282,6 @@
           losePoints: losePoints,
           losePointsItem: losePointsItem
         })
-        debugger
         setOption(that.chart, classPoints)
       }
     })
diff --git a/pages/m_consult/c_reult-item-tab/c_reult-item-tab.wxss b/pages/m_consult/c_reult-item-tab/c_reult-item-tab.wxss
deleted file mode 100644
index 6861c57..0000000
--- a/pages/m_consult/c_reult-item-tab/c_reult-item-tab.wxss
+++ /dev/null
@@ -1 +0,0 @@
-/* pages/m_consult/c_reult-item-tab/c_reult-item-tab.wxss */
\ No newline at end of file
diff --git a/pages/m_learn/learfile/learnfile.wxss b/pages/m_learn/learfile/learnfile.wxss
deleted file mode 100644
index 870b219..0000000
--- a/pages/m_learn/learfile/learnfile.wxss
+++ /dev/null
@@ -1 +0,0 @@
-/* pages/m_learn/learfile/learnfile.wxss */
\ No newline at end of file
diff --git a/pages/m_learn/learncase/learncase.wxss b/pages/m_learn/learncase/learncase.wxss
deleted file mode 100644
index 8aac863..0000000
--- a/pages/m_learn/learncase/learncase.wxss
+++ /dev/null
@@ -1 +0,0 @@
-/* pages/m_learn/learncase/learncase.wxss */
\ No newline at end of file
diff --git a/pages/m_user/companyregister/companyregister.wxml b/pages/m_user/companyregister/companyregister.wxml
deleted file mode 100644
index 1559da7..0000000
--- a/pages/m_user/companyregister/companyregister.wxml
+++ /dev/null
@@ -1,2 +0,0 @@
-<!--pages/m_user/companyregister/companyregister.wxml-->
-
diff --git a/pages/m_user/companyregister/companyregister.wxss b/pages/m_user/companyregister/companyregister.wxss
deleted file mode 100644
index 3cdae1f..0000000
--- a/pages/m_user/companyregister/companyregister.wxss
+++ /dev/null
@@ -1 +0,0 @@
-/* pages/m_user/companyregister/companyregister.wxss */
\ No newline at end of file
diff --git a/pages/m_user/userlogin/userlogin.wxml b/pages/m_user/userlogin/userlogin.wxml
deleted file mode 100644
index 00b1fcc..0000000
--- a/pages/m_user/userlogin/userlogin.wxml
+++ /dev/null
@@ -1,24 +0,0 @@
-<!--pages/m_user/userlogin/userlogin.wxml-->
-<view class="page">
-  <view class="page__bd">
-    <image class="banner-bg" src="{{bgPath}}"></image>
-    <view class="login-btn">
-      <view class="submit" bindtap="loginWx">寰俊鐢ㄦ埛涓�閿櫥褰�</view>
-      <view class="login-btn_text" bindtap="gotoLogin">璐﹀彿瀵嗙爜鐧诲綍/娉ㄥ唽</view>
-    </view>
-    <view class="weui-agree">
-      <label bindtap="checkboxChange">
-        <checkbox class="weui-agree__checkbox-check" value="{{agree}}" checked="{{agree}}" />
-        <span class="weui-agree__checkbox"></span>
-        <span class="weui-agree__text">闃呰骞跺悓鎰�</span>
-      </label>
-      <span class="weui-agree__text"><text bindtap="gotoAgreement">銆婁腑灏忓井浼佷笟鐢熸�佺幆澧冨畧娉曟櫤鑳芥湇鍔$敤鎴锋潯娆俱��</text>
-        <!-- 鍙�<text>銆婇殣绉佹潯娆俱��</text> -->
-      </span>
-    </view>
-  </view>
-  <view class="page__ft">
-    <view>涓氬姟鎸囧锛氫笂娴峰競鐢熸�佺幆澧冨眬鎵ф硶鎬婚槦</view>
-    <view>鎶�鏈敮鎸侊細涓婃捣椋炵窘鐜繚绉戞妧鏈夐檺鍏徃</view>
-  </view>
-</view>
\ No newline at end of file
diff --git a/pages/m_user/userregistercompany/userregistercompany.wxml b/pages/m_user/userregistercompany/userregistercompany.wxml
deleted file mode 100644
index 78fc1c9..0000000
--- a/pages/m_user/userregistercompany/userregistercompany.wxml
+++ /dev/null
@@ -1,27 +0,0 @@
-<!--pages/m_user/userregistercompany/userregistercompany.wxml-->
-<view class="page">
-  <mp-toptips type="error" msg="{{errorMsg}}" show="{{errorMsg}}" delay="2000"></mp-toptips>
-
-  <view class="page__bd">
-    <view class="top-card">
-      <view class="tag"><text style="color: transparent;">*</text>浼佷笟绫诲瀷</view>
-      <picker mode="selector" bindchange="changeSceneType" value="{{sceneTypeIndex}}" range="{{sceneTypes}}" range-key="name" class="value">
-        <view>{{sceneTypes[sceneTypeIndex].name}}</view>
-      </picker>
-      <mp-icon icon="arrow" color="#7F7F7F" size="{{10}}"></mp-icon>
-    </view>
-
-    <view class="items">
-      <mp-cells>
-        <input-cell wx:for="{{msg}}" wx:key="id" item="{{item}}" bindpassValue="changeMsg"></input-cell>
-      </mp-cells>
-    </view>
-
-    <view class="weui-upload-view">
-      <mp-upload title="涓婁紶钀ヤ笟鎵х収" titleClass="upload-title-class" max-count="1" files="{{imgFiles}}" binduploadImg="uploadFile" binddelete="delImg"></mp-upload>
-    </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_user/userregistercompany/userregistercompany.wxss b/pages/m_user/userregistercompany/userregistercompany.wxss
deleted file mode 100644
index 033a471..0000000
--- a/pages/m_user/userregistercompany/userregistercompany.wxss
+++ /dev/null
@@ -1,43 +0,0 @@
-/* pages/m_user/userregistercompany/userregistercompany.wxss */
-.top-card {
-  /* position: relative; */
-  display: flex;
-  flex-direction: row;
-  background-color: white;
-  border-radius: 4px;
-  /* margin: 0px 8px 8px 8px; */
-  margin-top: 8px;
-  padding: 8px;
-  font-size: 16px;
-}
-
-.items {
-  padding: 0 8px;
-  background-color: white;
-}
-
-.top-card .tag {
-  /* display: inline-block; */
-  width: 105px;
-  white-space: nowrap;
-}
-
-.top-card .value {
-  flex-grow: 1;
-}
-
-.top-card .value view {
-  max-width: 200px;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-}
-
-.weui-upload-view {
-  background-color: white;
-  padding: 8px;
-}
-
-.page__ft {
-  background-color: white;
-}
\ No newline at end of file
diff --git a/pages/m_user/userregistergov/userregistergov.wxml b/pages/m_user/userregistergov/userregistergov.wxml
deleted file mode 100644
index 1dd8c05..0000000
--- a/pages/m_user/userregistergov/userregistergov.wxml
+++ /dev/null
@@ -1,2 +0,0 @@
-<!--pages/m_user/userregistergov/userregistergov.wxml-->
-<text>pages/m_user/userregistergov/userregistergov.wxml</text>
diff --git a/pages/m_user/userregistergov/userregistergov.wxss b/pages/m_user/userregistergov/userregistergov.wxss
deleted file mode 100644
index ad09645..0000000
--- a/pages/m_user/userregistergov/userregistergov.wxss
+++ /dev/null
@@ -1 +0,0 @@
-/* pages/m_user/userregistergov/userregistergov.wxss */
\ No newline at end of file
diff --git a/pages/m_user/userregistertype/userregistertype.js b/pages/m_user/userregistertype/userregistertype.js
deleted file mode 100644
index a7d0db8..0000000
--- a/pages/m_user/userregistertype/userregistertype.js
+++ /dev/null
@@ -1,35 +0,0 @@
-// pages/m_user/userregistertype/userregistertype.js
-Page({
-
-  /**
-   * 椤甸潰鐨勫垵濮嬫暟鎹�
-   */
-  data: {
-
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
-   */
-  onLoad(options) {
-
-  },
-
-  gotoRegisterInfo(e) {
-    let index = e.currentTarget.dataset.index
-    let url = ""
-    switch(index) {
-      case "0":
-        url = `/pages/m_user/userregistercompany/userregistercompany`
-        break;
-      case "1":
-        url = `/pages/m_user/userregistergov/userregistergov`
-        break;
-    }
-    if (url != "") {
-      wx.navigateTo({
-        url: url
-      })
-    }
-  }
-})
\ No newline at end of file
diff --git a/pages/text/text.js b/pages/text/text.js
index 210817a..79508ec 100644
--- a/pages/text/text.js
+++ b/pages/text/text.js
@@ -12,6 +12,13 @@
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
    */
   onLoad: function (options) {
-
+    this.setData({
+      str: "adawfzfdafadsd"
+    })
+    console.log("wtf:::::::::::::::::::::");
   },
+
+  onReady: function () {
+    console.log("onReady:::::::::::::::::::::");
+  }
 })
\ No newline at end of file
diff --git a/pages/text/text.wxml b/pages/text/text.wxml
index f6fa62a..f4bf7c1 100644
--- a/pages/text/text.wxml
+++ b/pages/text/text.wxml
@@ -5,20 +5,21 @@
     <text class="tag">2022/03/08\t08:56</text>
   </view>
   <view class="page__bd">
-    <image src="/res/icons/txt_1.png" class="txt-img" mode="aspectFit"></image>
+    <!-- <image src="/res/icons/txt_1.png" class="txt-img" mode="aspectFit"></image> -->
     <view class="txt-content">
       <text>椁愰ギ浼佷笟钀ヤ笟鎵х収銆侀鍝佺粡钀ヨ鍙瘉涓㈠け璇ュ浣曡ˉ棰嗭紝鍙婃椂鍚戝綋鍦版斂搴滄満鏋勬姤澶囥�傞楗紒涓氳惀涓氭墽鐓с�侀鍝佺粡钀ヨ鍙瘉涓㈠け璇ュ浣曡ˉ棰嗭紝鍙婃椂鍚戝綋鍦版斂搴滄満鏋勬姤澶囥�傞楗紒涓氳惀涓氭墽鐓с�侀鍝佺粡钀ヨ鍙瘉涓㈠け璇ュ浣曡ˉ棰嗭紝鍙婃椂鍚戝綋鍦版斂搴滄満鏋勬姤澶囥�傞楗紒涓氳惀涓氭墽鐓с�侀鍝佺粡钀ヨ鍙瘉涓㈠け璇ュ浣曡ˉ棰嗭紝鍙婃椂鍚戝綋鍦版斂搴滄満鏋勬姤澶囥�俓n
         绗竴锛氬強鏃跺悜褰撳湴鏀垮簻鏈烘瀯鎶ュ\n
         椁愰ギ浼佷笟钀ヤ笟鎵х収銆侀鍝佺粡钀ヨ鍙瘉涓㈠け璇ュ浣曡ˉ棰嗭紝鍙婃椂鍚戝綋鍦版斂搴滄満鏋勬姤澶囥�傞楗紒涓氳惀涓氭墽鐓с�侀鍝佺粡钀ヨ鍙瘉涓㈠け璇ュ浣曡ˉ棰嗭紝鍙婃椂鍚戝綋鍦版斂搴滄満鏋勬姤澶囥�傞楗紒涓氳惀涓氭墽鐓с�侀鍝佺粡钀ヨ鍙瘉涓㈠け璇ュ浣曡ˉ棰嗭紝鍙婃椂鍚戝綋鍦版斂搴滄満鏋勬姤澶囥�傞楗紒涓氳惀涓氭墽鐓с�侀鍝佺粡钀ヨ鍙瘉涓㈠け璇ュ浣曡ˉ棰嗭紝鍙婃椂鍚戝綋鍦版斂搴滄満鏋勬姤澶囥�傞楗紒涓氳惀涓氭墽鐓с�侀鍝佺粡钀ヨ鍙瘉涓㈠け璇ュ浣曡ˉ棰嗭紝鍙婃椂鍚戝綋鍦版斂搴滄満鏋勬姤澶囥�傞楗紒涓氳惀涓氭墽鐓с�侀鍝佺粡钀ヨ鍙瘉涓㈠け璇ュ浣曡ˉ棰嗭紝鍙婃椂鍚戝綋鍦版斂搴滄満鏋勬姤澶囥�傞楗紒涓氳惀涓氭墽鐓с�侀鍝佺粡钀ヨ鍙瘉涓㈠け璇ュ浣曡ˉ棰嗭紝鍙婃椂鍚戝綋鍦版斂搴滄満鏋勬姤澶囥�傞楗紒涓氳惀涓氭墽鐓с�侀鍝佺粡钀ヨ鍙瘉涓㈠け璇ュ浣曡ˉ棰嗭紝鍙婃椂鍚戝綋鍦版斂搴滄満鏋勬姤澶囥�傞楗紒涓氳惀涓氭墽鐓с�侀鍝佺粡钀ヨ鍙瘉涓㈠け璇ュ浣曡ˉ棰嗭紝鍙婃椂鍚戝綋鍦版斂搴滄満鏋勬姤澶囥�傞楗紒涓氳惀涓氭墽鐓с�侀鍝佺粡钀ヨ鍙瘉涓㈠け璇ュ浣曡ˉ棰嗭紝鍙婃椂鍚戝綋鍦版斂搴滄満鏋勬姤澶囥�傞楗紒涓氳惀涓氭墽鐓с�侀鍝佺粡钀ヨ鍙瘉涓㈠け璇ュ浣曡ˉ棰嗭紝鍙婃椂鍚戝綋鍦版斂搴滄満鏋勬姤澶囥��</text>
     </view>
-    <image src="/res/icons/txt_1.png" class="txt-img" mode="aspectFit"></image>
+    <text>{{str}}</text>
+    <!-- <image src="/res/icons/txt_1.png" class="txt-img" mode="aspectFit"></image> -->
   </view>
   <view class="page__ft">
-    <view class="flex-h">
+    <!-- <view class="flex-h">
       <image src="/res/icons/view.png" class="icon"></image>56
     </view>
     <view class="flex-h">
       <image src="/res/icons/like.png" class="icon"></image>23
-    </view>
+    </view> -->
   </view>
 </view>
\ No newline at end of file
diff --git a/project.private.config.json b/project.private.config.json
index e86baf5..fad69af 100644
--- a/project.private.config.json
+++ b/project.private.config.json
@@ -4,5 +4,6 @@
     "compileHotReLoad": true
   },
   "description": "椤圭洰绉佹湁閰嶇疆鏂囦欢銆傛鏂囦欢涓殑鍐呭灏嗚鐩� project.config.json 涓殑鐩稿悓瀛楁銆傞」鐩殑鏀瑰姩浼樺厛鍚屾鍒版鏂囦欢涓�傝瑙佹枃妗o細https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
-  "projectname": "ep-law-abiding"
+  "projectname": "ep-law-abiding",
+  "libVersion": "2.25.4"
 }
\ No newline at end of file
diff --git a/readme.md b/readme.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/readme.md
diff --git "a/res/icons/4-1-\346\210\221\347\232\204_slices.zip" "b/res/icons/4-1-\346\210\221\347\232\204_slices.zip"
deleted file mode 100644
index 79e2fdf..0000000
--- "a/res/icons/4-1-\346\210\221\347\232\204_slices.zip"
+++ /dev/null
Binary files differ
diff --git a/res/icons/change_icon.jpg b/res/icons/change_icon.jpg
new file mode 100644
index 0000000..c60372a
--- /dev/null
+++ b/res/icons/change_icon.jpg
Binary files differ
diff --git a/res/icons/qrcode.png b/res/icons/qrcode.png
new file mode 100644
index 0000000..4873554
--- /dev/null
+++ b/res/icons/qrcode.png
Binary files differ
diff --git a/service/assessmentservice.js b/service/assessmentservice.js
index a5c9451..a2c64b6 100644
--- a/service/assessmentservice.js
+++ b/service/assessmentservice.js
@@ -19,7 +19,8 @@
       url: '/evaluationsubrule/score',
       params: {
         userId: userId,
-        time: time
+        time: time,
+        platform: 'weixin'
       },
     }
     Object.assign(cb, fun)
@@ -32,7 +33,8 @@
       url: `/evaluation/historyPoint/${userId}`,
       params: {
         page: page,
-        per_page: 30
+        per_page: 30,
+        platform: 'weixin'
       },
     }
     Object.assign(cb, fun)
diff --git a/service/baserequest.js b/service/baserequest.js
index 3a5e333..35bca96 100644
--- a/service/baserequest.js
+++ b/service/baserequest.js
@@ -11,7 +11,7 @@
 const util = require("../utils/util.js")
 
 const originProperties = ['url', 'data', 'header', 'method', 'success', 'fail', 'complete'];
-// const baseUrl = "http://192.168.0.137:8080"
+// const baseUrl = "http://192.168.1.12:8080"
 // const baseUrl = "https://fyami.com.cn:447"
 const baseUrl = "https://fyami.com.cn"
 
@@ -21,7 +21,8 @@
 const baseIconUrl = `${bu}/images/weixin/eplaw/`
 const baseFileUrl = `${bu}/meeting/file/`
 
-function request(fun) {
+function request(fun, hostUrl) {
+  const bUrl = hostUrl ? hostUrl : baseUrl
   if (fun.params != undefined) {
     var param = ""
     Object.keys(fun.params).forEach(key => {
@@ -33,10 +34,10 @@
       }
     });
     var url = fun.url
-    fun.url = baseUrl + url + "?" + param
+    fun.url = bUrl + url + "?" + param
   } else {
     var url = fun.url
-    fun.url = baseUrl + url
+    fun.url = bUrl + url
   }
   var fun1 = util.deepCopy(fun)
   fun1.success = function (res) {
@@ -44,16 +45,20 @@
     console.log("|--璁块棶: ", fun.url);
     console.log("|--缁撴灉: ", res);
 
-    if (fun.onHead) {
-      fun.onHead(res.header)
+    if (res.statusCode == 200) {
+      if (fun.onHead) {
+        fun.onHead(res.header)
+      }
+      fun.success(res.data) 
+    } else {
+      fun.fail(res.statusCode)
     }
-    fun.success(res.data)
     // if(res.data.success) {
     //   var head = res.data['head']
     //   if (head != undefined && fun.page != undefined) {
     //     fun.page(head.page, head.totalPage)
     //   }
-    //   fun.success(res.data.data)
+    //   fun.success(res.data.data)                                                                                                                           
     // } else {
     //   fun.fail(res.data)
     // }
@@ -75,13 +80,13 @@
 }
 
 module.exports = {
-  get: function (fun) {
+  get: function (fun, hostUrl) {
     fun['method'] = 'GET'
-    request(fun)
+    request(fun, hostUrl)
   },
-  post: function (fun) {
+  post: function (fun, hostUrl) {
     fun['method'] = 'POST'
-    request(fun)
+    request(fun, hostUrl)
   },
   basePicUrl: basePicUrl,
   baseUrl: baseUrl,
diff --git a/service/deviceservice.js b/service/deviceservice.js
index 4ace174..d699b77 100644
--- a/service/deviceservice.js
+++ b/service/deviceservice.js
@@ -26,4 +26,23 @@
 
     $f.get(cb)
   },
+
+  //鑾峰彇闈欏畨椁愰ギ鐩戞祴鏁版嵁
+  getJingAnFumeVakue: function (userId, sT, eT, fun) {
+    let cb = {
+      url: `/device/fume/jingan/value`,
+      params: {
+        userId: userId,
+      }
+    }
+    if (sT && sT != '') {
+      cb.params.startTime = sT
+    }
+    if (eT && eT != '') {
+      cb.params.endTime = eT
+    }
+    Object.assign(cb, fun)
+
+    $f.get(cb)
+  },
 }
\ No newline at end of file
diff --git a/service/ledgerservice.js b/service/ledgerservice.js
index 5030ebf..a91f93b 100644
--- a/service/ledgerservice.js
+++ b/service/ledgerservice.js
@@ -47,6 +47,21 @@
     })
   },
 
+  // 涓婁紶涓嶆秹鍙婂彴璐�
+  uploadNoLedger: function(userId, time, ledgerIdList, fun) {
+    let cb = {
+      url: '/ledger/upload/noLedger',
+      params: {
+        userId: userId,
+        time: time
+      },
+      data: ledgerIdList,
+    }
+    Object.assign(cb, fun)
+
+    $f.post(cb)
+  },
+
   //鑾峰彇鍙拌处璇︽儏
   getLedgerDetail: function (userId, ledgerSubTypeId, sceneType, time, fun) {
     let cb = {
diff --git a/service/taskservice.js b/service/taskservice.js
new file mode 100644
index 0000000..231dc8b
--- /dev/null
+++ b/service/taskservice.js
@@ -0,0 +1,77 @@
+const Multipart = require('../utils/Multipart.min')
+const $f = require('./baserequest')
+const util = require('../utils/util')
+
+const baseUrl = "https://fyami.com.cn:447"
+// const baseUrl = "http://47.100.191.150:9005"
+const imgUrl = baseUrl + '/images/'
+
+module.exports = {
+  imgUrl,
+
+  //鑾峰彇椋炵窘鐩戠鎵�鏈夐《灞備换鍔�
+  getTopTask: function (fun) {
+    let cb = {
+      url: `/task/alltask/0`,
+    }
+    Object.assign(cb, fun)
+    $f.get(cb, baseUrl)
+  },
+
+  //鑾峰彇瀛愪换鍔$粺璁�
+  getSubTaskSummary: function (topTaskId, sceneTypeId, fun) {
+    let cb = {
+      url: `/subtask/summary`,
+      params: {
+        topTaskId: topTaskId,
+        sceneTypeId: sceneTypeId,
+      }
+    }
+    Object.assign(cb, fun)
+    $f.get(cb, baseUrl)
+  },
+
+  //鑾峰彇瀛愪换鍔¤鎯�
+  getSubtask: function (stGuid, fun) {
+    let cb = {
+      url: `/subtask/${stGuid}`,
+    }
+    Object.assign(cb, fun)
+    $f.get(cb, baseUrl)
+  },
+
+  //鑾峰彇瀛愪换鍔¢棶棰�
+  getProblem: function (stGuid, fun) {
+    let cb = {
+      url: `/problemlist/subtask`,
+      params: {
+        stGuid: stGuid,
+      }
+    }
+    Object.assign(cb, fun)
+    $f.get(cb, baseUrl)
+  },
+
+  //涓婁紶鏁存敼鍥剧墖
+  uploadChangePic: function (pId, paths, fun) {
+    const fields = [{
+      name: 'problemId',
+      value: pId
+    }]
+    const files = []
+    paths.forEach(p => {
+      files.push({
+        name: 'images',
+        filePath: p
+      })
+    });
+    console.log(files);
+    let p = new Multipart({
+      fields,
+      files
+    }).submit(baseUrl + `/problemlist/changeProblem`)
+    p.then(res => {
+      fun.success(res)
+    })
+  },
+}
\ No newline at end of file

--
Gitblit v1.9.3