From 1d6e2451a75b55d4ef2705439c6ef436b86a4f0c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E6=85=A2=E6=85=A2?= <994797151@qq.com>
Date: Wed, 2 Jun 2021 17:25:52 +0800
Subject: [PATCH] =?UTF-8?q?[=E4=B8=8A=E4=BC=A0]?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
手太欠/优迪尔-小程序/api/err.js | 54 +
手太欠/优迪尔-小程序/api/index.js | 24 +
.../优迪尔-小程序/api/interfaces/address.js | 6 +
手太欠/优迪尔-小程序/api/interfaces/auth.js | 10 +
手太欠/优迪尔-小程序/api/interfaces/file.js | 11 +
.../优迪尔-小程序/api/interfaces/stuIndex.js | 13 +
.../优迪尔-小程序/api/interfaces/stuUsers.js | 10 +
.../优迪尔-小程序/api/interfaces/teaIndex.js | 54 +
.../优迪尔-小程序/api/interfaces/teaUsers.js | 16 +
手太欠/优迪尔-小程序/api/request.js | 130 ++
手太欠/优迪尔-小程序/api/updateToken.js | 17 +
手太欠/优迪尔-小程序/app.js | 52 +
手太欠/优迪尔-小程序/app.json | 46 +
手太欠/优迪尔-小程序/app.wxss | 186 +++
.../commpent/image-cropper-master/image-cropper.js | 1120 +++++++++++++++++
.../commpent/image-cropper-master/image-cropper.json | 3 +
.../commpent/image-cropper-master/image-cropper.wxml | 24 +
.../commpent/image-cropper-master/image-cropper.wxss | 123 ++
手太欠/优迪尔-小程序/custom-tab-bar/index.js | 69 +
.../优迪尔-小程序/custom-tab-bar/index.json | 3 +
.../优迪尔-小程序/custom-tab-bar/index.wxml | 10 +
.../优迪尔-小程序/custom-tab-bar/index.wxss | 41 +
手太欠/优迪尔-小程序/pages/login/index.js | 170 +++
手太欠/优迪尔-小程序/pages/login/index.json | 4 +
手太欠/优迪尔-小程序/pages/login/index.wxml | 51 +
手太欠/优迪尔-小程序/pages/login/index.wxss | 247 ++++
.../优迪尔-小程序/pages/publicChapter/index.js | 119 ++
.../优迪尔-小程序/pages/publicChapter/index.json | 4 +
.../优迪尔-小程序/pages/publicChapter/index.wxml | 48 +
.../优迪尔-小程序/pages/publicChapter/index.wxss | 133 ++
.../优迪尔-小程序/pages/publicCourse/index.js | 120 ++
.../优迪尔-小程序/pages/publicCourse/index.json | 4 +
.../优迪尔-小程序/pages/publicCourse/index.wxml | 28 +
.../优迪尔-小程序/pages/publicCourse/index.wxss | 63 +
.../优迪尔-小程序/pages/publicDetails/index.js | 45 +
.../优迪尔-小程序/pages/publicDetails/index.json | 4 +
.../优迪尔-小程序/pages/publicDetails/index.wxml | 25 +
.../优迪尔-小程序/pages/publicDetails/index.wxss | 106 ++
.../优迪尔-小程序/pages/publicReview/index.js | 130 ++
.../优迪尔-小程序/pages/publicReview/index.json | 4 +
.../优迪尔-小程序/pages/publicReview/index.wxml | 68 +
.../优迪尔-小程序/pages/publicReview/index.wxss | 144 +++
手太欠/优迪尔-小程序/pages/register/index.js | 270 ++++
.../优迪尔-小程序/pages/register/index.json | 4 +
.../优迪尔-小程序/pages/register/index.wxml | 63 +
.../优迪尔-小程序/pages/register/index.wxss | 210 ++++
手太欠/优迪尔-小程序/pages/stuIndex/index.js | 79 ++
.../优迪尔-小程序/pages/stuIndex/index.json | 3 +
.../优迪尔-小程序/pages/stuIndex/index.wxml | 45 +
.../优迪尔-小程序/pages/stuIndex/index.wxss | 108 ++
手太欠/优迪尔-小程序/pages/stuUser/index.js | 66 +
手太欠/优迪尔-小程序/pages/stuUser/index.json | 4 +
手太欠/优迪尔-小程序/pages/stuUser/index.wxml | 27 +
手太欠/优迪尔-小程序/pages/stuUser/index.wxss | 72 ++
.../pages/teaActivity-details/index.js | 61 +
.../pages/teaActivity-details/index.json | 4 +
.../pages/teaActivity-details/index.wxml | 29 +
.../pages/teaActivity-details/index.wxss | 84 ++
.../pages/teaActivity-list/index.js | 69 +
.../pages/teaActivity-list/index.json | 4 +
.../pages/teaActivity-list/index.wxml | 23 +
.../pages/teaActivity-list/index.wxss | 41 +
.../优迪尔-小程序/pages/teaActivity/index.js | 69 +
.../优迪尔-小程序/pages/teaActivity/index.json | 4 +
.../优迪尔-小程序/pages/teaActivity/index.wxml | 28 +
.../优迪尔-小程序/pages/teaActivity/index.wxss | 59 +
.../优迪尔-小程序/pages/teaClass-build/index.js | 61 +
.../pages/teaClass-build/index.json | 4 +
.../pages/teaClass-build/index.wxml | 11 +
.../pages/teaClass-build/index.wxss | 41 +
.../pages/teaClass-details/index.js | 43 +
.../pages/teaClass-details/index.json | 4 +
.../pages/teaClass-details/index.wxml | 65 +
.../pages/teaClass-details/index.wxss | 192 +++
.../优迪尔-小程序/pages/teaClass-form/index.js | 58 +
.../优迪尔-小程序/pages/teaClass-form/index.json | 3 +
.../优迪尔-小程序/pages/teaClass-form/index.wxml | 13 +
.../优迪尔-小程序/pages/teaClass-form/index.wxss | 72 ++
.../优迪尔-小程序/pages/teaClass-select/index.js | 70 ++
.../pages/teaClass-select/index.json | 4 +
.../pages/teaClass-select/index.wxml | 10 +
.../pages/teaClass-select/index.wxss | 50 +
手太欠/优迪尔-小程序/pages/teaClass/index.js | 97 ++
.../优迪尔-小程序/pages/teaClass/index.json | 4 +
.../优迪尔-小程序/pages/teaClass/index.wxml | 30 +
.../优迪尔-小程序/pages/teaClass/index.wxss | 71 ++
.../优迪尔-小程序/pages/teaDetails/index.js | 70 ++
.../优迪尔-小程序/pages/teaDetails/index.json | 3 +
.../优迪尔-小程序/pages/teaDetails/index.wxml | 2 +
.../优迪尔-小程序/pages/teaDetails/index.wxss | 4 +
.../pages/teaFeedback-form/index.js | 67 +
.../pages/teaFeedback-form/index.json | 4 +
.../pages/teaFeedback-form/index.wxml | 11 +
.../pages/teaFeedback-form/index.wxss | 35 +
.../优迪尔-小程序/pages/teaFeedback/index.js | 89 ++
.../优迪尔-小程序/pages/teaFeedback/index.json | 4 +
.../优迪尔-小程序/pages/teaFeedback/index.wxml | 60 +
.../优迪尔-小程序/pages/teaFeedback/index.wxss | 169 +++
手太欠/优迪尔-小程序/pages/teaIndex/index.js | 130 ++
.../优迪尔-小程序/pages/teaIndex/index.json | 4 +
.../优迪尔-小程序/pages/teaIndex/index.wxml | 57 +
.../优迪尔-小程序/pages/teaIndex/index.wxss | 161 +++
手太欠/优迪尔-小程序/pages/teaSchool/index.js | 58 +
.../优迪尔-小程序/pages/teaSchool/index.json | 4 +
.../优迪尔-小程序/pages/teaSchool/index.wxml | 75 ++
.../优迪尔-小程序/pages/teaSchool/index.wxss | 131 ++
.../pages/teaStudent-details/index.js | 62 +
.../pages/teaStudent-details/index.json | 4 +
.../pages/teaStudent-details/index.wxml | 32 +
.../pages/teaStudent-details/index.wxss | 100 ++
.../优迪尔-小程序/pages/teaStudent-list/index.js | 81 ++
.../pages/teaStudent-list/index.json | 4 +
.../pages/teaStudent-list/index.wxml | 30 +
.../pages/teaStudent-list/index.wxss | 62 +
手太欠/优迪尔-小程序/pages/teaUser/index.js | 79 ++
手太欠/优迪尔-小程序/pages/teaUser/index.json | 4 +
手太欠/优迪尔-小程序/pages/teaUser/index.wxml | 55 +
手太欠/优迪尔-小程序/pages/teaUser/index.wxss | 83 ++
手太欠/优迪尔-小程序/pages/userHead/index.js | 61 +
.../优迪尔-小程序/pages/userHead/index.json | 4 +
.../优迪尔-小程序/pages/userHead/index.wxml | 13 +
.../优迪尔-小程序/pages/userHead/index.wxss | 74 ++
.../优迪尔-小程序/pages/userSetting/index.js | 38 +
.../优迪尔-小程序/pages/userSetting/index.json | 4 +
.../优迪尔-小程序/pages/userSetting/index.wxml | 15 +
.../优迪尔-小程序/pages/userSetting/index.wxss | 43 +
手太欠/优迪尔-小程序/pages/userTel/index.js | 89 ++
手太欠/优迪尔-小程序/pages/userTel/index.json | 4 +
手太欠/优迪尔-小程序/pages/userTel/index.wxml | 20 +
手太欠/优迪尔-小程序/pages/userTel/index.wxss | 74 ++
.../优迪尔-小程序/pages/works_img/works_img.js | 46 +
.../优迪尔-小程序/pages/works_img/works_img.json | 7 +
.../优迪尔-小程序/pages/works_img/works_img.wxml | 7 +
.../优迪尔-小程序/pages/works_img/works_img.wxss | 21 +
手太欠/优迪尔-小程序/project.config.json | 98 ++
.../优迪尔-小程序/project.private.config.json | 96 ++
手太欠/优迪尔-小程序/sitemap.json | 7 +
.../优迪尔-小程序/static/icon/add_card_icon.png | Bin 0 -> 569 bytes
.../优迪尔-小程序/static/icon/address_icon.png | Bin 0 -> 4507 bytes
.../优迪尔-小程序/static/icon/arrow_black.png | Bin 0 -> 206 bytes
.../优迪尔-小程序/static/icon/arrow_grey.png | Bin 0 -> 199 bytes
.../static/icon/arrows_right_icon.png | Bin 0 -> 3541 bytes
.../优迪尔-小程序/static/icon/retreat_icon.png | Bin 0 -> 2550 bytes
.../优迪尔-小程序/static/icon/search_icon.png | Bin 0 -> 1496 bytes
.../优迪尔-小程序/static/img/activityTime.png | Bin 0 -> 1210 bytes
.../优迪尔-小程序/static/img/address_back.png | Bin 0 -> 3210 bytes
手太欠/优迪尔-小程序/static/img/banner.png | Bin 0 -> 261527 bytes
.../static/img/chapterList_icon.png | Bin 0 -> 15688 bytes
.../优迪尔-小程序/static/img/class-edit.png | Bin 0 -> 1371 bytes
.../优迪尔-小程序/static/img/classForm-icon.png | Bin 0 -> 1754 bytes
.../优迪尔-小程序/static/img/classShow_back.png | Bin 0 -> 147346 bytes
.../优迪尔-小程序/static/img/classShow_code.png | Bin 0 -> 60141 bytes
手太欠/优迪尔-小程序/static/img/code.jpg | Bin 0 -> 24461 bytes
.../优迪尔-小程序/static/img/header-logo.png | Bin 0 -> 12214 bytes
手太欠/优迪尔-小程序/static/img/login.png | Bin 0 -> 259923 bytes
手太欠/优迪尔-小程序/static/img/loginLogo.jpg | Bin 0 -> 12866 bytes
.../优迪尔-小程序/static/img/login_star.png | Bin 0 -> 50657 bytes
.../优迪尔-小程序/static/img/login_title.png | Bin 0 -> 82864 bytes
手太欠/优迪尔-小程序/static/img/myIcon_00.png | Bin 0 -> 2792 bytes
手太欠/优迪尔-小程序/static/img/myIcon_01.png | Bin 0 -> 1753 bytes
手太欠/优迪尔-小程序/static/img/myIcon_02.png | Bin 0 -> 1438 bytes
手太欠/优迪尔-小程序/static/img/myIcon_03.png | Bin 0 -> 1251 bytes
手太欠/优迪尔-小程序/static/img/myIcon_04.png | Bin 0 -> 1536 bytes
手太欠/优迪尔-小程序/static/img/myIcon_05.png | Bin 0 -> 1782 bytes
手太欠/优迪尔-小程序/static/img/myIcon_06.png | Bin 0 -> 755 bytes
手太欠/优迪尔-小程序/static/img/null_icon.png | Bin 0 -> 2652 bytes
.../优迪尔-小程序/static/img/refresh_loding.gif | Bin 0 -> 1787 bytes
.../优迪尔-小程序/static/img/reviewSort_00.png | Bin 0 -> 7311 bytes
.../优迪尔-小程序/static/img/reviewSort_01.png | Bin 0 -> 8368 bytes
.../优迪尔-小程序/static/img/reviewSort_02.png | Bin 0 -> 8097 bytes
.../优迪尔-小程序/static/img/reviewSort_03.png | Bin 0 -> 8295 bytes
.../static/img/sectiondetail_left.png | Bin 0 -> 3245 bytes
.../static/img/sectiondetail_right.png | Bin 0 -> 3182 bytes
.../优迪尔-小程序/static/img/staff_null.png | Bin 0 -> 2306 bytes
.../优迪尔-小程序/static/img/stuChapter_row.png | Bin 0 -> 15139 bytes
.../static/img/stuList_icon_back.png | Bin 0 -> 1381 bytes
.../static/img/stuList_icon_play.png | Bin 0 -> 1400 bytes
.../优迪尔-小程序/static/img/stuList_lock.png | Bin 0 -> 1461 bytes
.../优迪尔-小程序/static/img/stuList_row.png | Bin 0 -> 660 bytes
.../优迪尔-小程序/static/img/studentDet_00.png | Bin 0 -> 1356 bytes
.../优迪尔-小程序/static/img/studentDet_01.png | Bin 0 -> 1429 bytes
.../优迪尔-小程序/static/img/studentDet_02.png | Bin 0 -> 1188 bytes
.../优迪尔-小程序/static/img/studentDet_03.png | Bin 0 -> 1197 bytes
.../优迪尔-小程序/static/img/studentIndex.jpg | Bin 0 -> 7326 bytes
.../优迪尔-小程序/static/img/studentList-arr.png | Bin 0 -> 310 bytes
.../优迪尔-小程序/static/img/studentList-tel.png | Bin 0 -> 1128 bytes
.../优迪尔-小程序/static/img/teaCalss_00.png | Bin 0 -> 926 bytes
.../优迪尔-小程序/static/img/teaCalss_01.png | Bin 0 -> 1098 bytes
.../优迪尔-小程序/static/img/teaCalss_02.png | Bin 0 -> 1533 bytes
.../优迪尔-小程序/static/img/teaCalss_03.png | Bin 0 -> 1138 bytes
.../优迪尔-小程序/static/img/userTel_icon.png | Bin 0 -> 1073 bytes
手太欠/优迪尔-小程序/static/img/user_row.png | Bin 0 -> 305 bytes
手太欠/优迪尔-小程序/static/img/videoIcon.png | Bin 0 -> 1517 bytes
.../static/tabBarIcon/stuTabBar_00.png | Bin 0 -> 1852 bytes
.../static/tabBarIcon/stuTabBar_00_active.png | Bin 0 -> 1853 bytes
.../static/tabBarIcon/stuTabBar_01.png | Bin 0 -> 2036 bytes
.../static/tabBarIcon/stuTabBar_01_active.png | Bin 0 -> 2053 bytes
.../static/tabBarIcon/teaTabBar_00.png | Bin 0 -> 2235 bytes
.../static/tabBarIcon/teaTabBar_00_active.png | Bin 0 -> 1888 bytes
.../static/tabBarIcon/teaTabBar_01.png | Bin 0 -> 2575 bytes
.../static/tabBarIcon/teaTabBar_01_active.png | Bin 0 -> 2620 bytes
.../static/tabBarIcon/teaTabBar_02.png | Bin 0 -> 3290 bytes
.../static/tabBarIcon/teaTabBar_02_active.png | Bin 0 -> 2755 bytes
手太欠/优迪尔-小程序/utils/outTime.js | 70 ++
.../优迪尔-小程序/utils/qqmap-wx-jssdk.min.js | 1 +
手太欠/优迪尔-小程序/utils/util.js | 36 +
206 files changed, 8430 insertions(+)
create mode 100644 手太欠/优迪尔-小程序/api/err.js
create mode 100644 手太欠/优迪尔-小程序/api/index.js
create mode 100644 手太欠/优迪尔-小程序/api/interfaces/address.js
create mode 100644 手太欠/优迪尔-小程序/api/interfaces/auth.js
create mode 100644 手太欠/优迪尔-小程序/api/interfaces/file.js
create mode 100644 手太欠/优迪尔-小程序/api/interfaces/stuIndex.js
create mode 100644 手太欠/优迪尔-小程序/api/interfaces/stuUsers.js
create mode 100644 手太欠/优迪尔-小程序/api/interfaces/teaIndex.js
create mode 100644 手太欠/优迪尔-小程序/api/interfaces/teaUsers.js
create mode 100644 手太欠/优迪尔-小程序/api/request.js
create mode 100644 手太欠/优迪尔-小程序/api/updateToken.js
create mode 100644 手太欠/优迪尔-小程序/app.js
create mode 100644 手太欠/优迪尔-小程序/app.json
create mode 100644 手太欠/优迪尔-小程序/app.wxss
create mode 100644 手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.js
create mode 100644 手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.json
create mode 100644 手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.wxml
create mode 100644 手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.wxss
create mode 100644 手太欠/优迪尔-小程序/custom-tab-bar/index.js
create mode 100644 手太欠/优迪尔-小程序/custom-tab-bar/index.json
create mode 100644 手太欠/优迪尔-小程序/custom-tab-bar/index.wxml
create mode 100644 手太欠/优迪尔-小程序/custom-tab-bar/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/login/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/login/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/login/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/login/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/publicChapter/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/publicChapter/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/publicChapter/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/publicChapter/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/publicCourse/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/publicCourse/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/publicCourse/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/publicCourse/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/publicDetails/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/publicDetails/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/publicDetails/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/publicDetails/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/publicReview/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/publicReview/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/publicReview/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/publicReview/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/register/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/register/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/register/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/register/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/stuIndex/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/stuIndex/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/stuIndex/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/stuIndex/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/stuUser/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/stuUser/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/stuUser/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/stuUser/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaActivity-details/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaActivity-details/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaActivity-details/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaActivity-details/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaActivity-list/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaActivity-list/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaActivity-list/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaActivity-list/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaActivity/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaActivity/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaActivity/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaActivity/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-build/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-build/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-build/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-build/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-details/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-details/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-details/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-details/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-form/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-form/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-form/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-form/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-select/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-select/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-select/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass-select/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaClass/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaDetails/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaDetails/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaDetails/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaDetails/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaFeedback-form/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaFeedback-form/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaFeedback-form/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaFeedback-form/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaFeedback/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaFeedback/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaFeedback/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaFeedback/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaIndex/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaIndex/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaIndex/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaIndex/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaSchool/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaSchool/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaSchool/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaSchool/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaStudent-details/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaStudent-details/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaStudent-details/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaStudent-details/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaStudent-list/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaStudent-list/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaStudent-list/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaStudent-list/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/teaUser/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/teaUser/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/teaUser/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/teaUser/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/userHead/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/userHead/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/userHead/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/userHead/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/userSetting/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/userSetting/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/userSetting/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/userSetting/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/userTel/index.js
create mode 100644 手太欠/优迪尔-小程序/pages/userTel/index.json
create mode 100644 手太欠/优迪尔-小程序/pages/userTel/index.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/userTel/index.wxss
create mode 100644 手太欠/优迪尔-小程序/pages/works_img/works_img.js
create mode 100644 手太欠/优迪尔-小程序/pages/works_img/works_img.json
create mode 100644 手太欠/优迪尔-小程序/pages/works_img/works_img.wxml
create mode 100644 手太欠/优迪尔-小程序/pages/works_img/works_img.wxss
create mode 100644 手太欠/优迪尔-小程序/project.config.json
create mode 100644 手太欠/优迪尔-小程序/project.private.config.json
create mode 100644 手太欠/优迪尔-小程序/sitemap.json
create mode 100644 手太欠/优迪尔-小程序/static/icon/add_card_icon.png
create mode 100644 手太欠/优迪尔-小程序/static/icon/address_icon.png
create mode 100644 手太欠/优迪尔-小程序/static/icon/arrow_black.png
create mode 100644 手太欠/优迪尔-小程序/static/icon/arrow_grey.png
create mode 100644 手太欠/优迪尔-小程序/static/icon/arrows_right_icon.png
create mode 100644 手太欠/优迪尔-小程序/static/icon/retreat_icon.png
create mode 100644 手太欠/优迪尔-小程序/static/icon/search_icon.png
create mode 100644 手太欠/优迪尔-小程序/static/img/activityTime.png
create mode 100644 手太欠/优迪尔-小程序/static/img/address_back.png
create mode 100644 手太欠/优迪尔-小程序/static/img/banner.png
create mode 100644 手太欠/优迪尔-小程序/static/img/chapterList_icon.png
create mode 100644 手太欠/优迪尔-小程序/static/img/class-edit.png
create mode 100644 手太欠/优迪尔-小程序/static/img/classForm-icon.png
create mode 100644 手太欠/优迪尔-小程序/static/img/classShow_back.png
create mode 100644 手太欠/优迪尔-小程序/static/img/classShow_code.png
create mode 100644 手太欠/优迪尔-小程序/static/img/code.jpg
create mode 100644 手太欠/优迪尔-小程序/static/img/header-logo.png
create mode 100644 手太欠/优迪尔-小程序/static/img/login.png
create mode 100644 手太欠/优迪尔-小程序/static/img/loginLogo.jpg
create mode 100644 手太欠/优迪尔-小程序/static/img/login_star.png
create mode 100644 手太欠/优迪尔-小程序/static/img/login_title.png
create mode 100644 手太欠/优迪尔-小程序/static/img/myIcon_00.png
create mode 100644 手太欠/优迪尔-小程序/static/img/myIcon_01.png
create mode 100644 手太欠/优迪尔-小程序/static/img/myIcon_02.png
create mode 100644 手太欠/优迪尔-小程序/static/img/myIcon_03.png
create mode 100644 手太欠/优迪尔-小程序/static/img/myIcon_04.png
create mode 100644 手太欠/优迪尔-小程序/static/img/myIcon_05.png
create mode 100644 手太欠/优迪尔-小程序/static/img/myIcon_06.png
create mode 100644 手太欠/优迪尔-小程序/static/img/null_icon.png
create mode 100644 手太欠/优迪尔-小程序/static/img/refresh_loding.gif
create mode 100644 手太欠/优迪尔-小程序/static/img/reviewSort_00.png
create mode 100644 手太欠/优迪尔-小程序/static/img/reviewSort_01.png
create mode 100644 手太欠/优迪尔-小程序/static/img/reviewSort_02.png
create mode 100644 手太欠/优迪尔-小程序/static/img/reviewSort_03.png
create mode 100644 手太欠/优迪尔-小程序/static/img/sectiondetail_left.png
create mode 100644 手太欠/优迪尔-小程序/static/img/sectiondetail_right.png
create mode 100644 手太欠/优迪尔-小程序/static/img/staff_null.png
create mode 100644 手太欠/优迪尔-小程序/static/img/stuChapter_row.png
create mode 100644 手太欠/优迪尔-小程序/static/img/stuList_icon_back.png
create mode 100644 手太欠/优迪尔-小程序/static/img/stuList_icon_play.png
create mode 100644 手太欠/优迪尔-小程序/static/img/stuList_lock.png
create mode 100644 手太欠/优迪尔-小程序/static/img/stuList_row.png
create mode 100644 手太欠/优迪尔-小程序/static/img/studentDet_00.png
create mode 100644 手太欠/优迪尔-小程序/static/img/studentDet_01.png
create mode 100644 手太欠/优迪尔-小程序/static/img/studentDet_02.png
create mode 100644 手太欠/优迪尔-小程序/static/img/studentDet_03.png
create mode 100644 手太欠/优迪尔-小程序/static/img/studentIndex.jpg
create mode 100644 手太欠/优迪尔-小程序/static/img/studentList-arr.png
create mode 100644 手太欠/优迪尔-小程序/static/img/studentList-tel.png
create mode 100644 手太欠/优迪尔-小程序/static/img/teaCalss_00.png
create mode 100644 手太欠/优迪尔-小程序/static/img/teaCalss_01.png
create mode 100644 手太欠/优迪尔-小程序/static/img/teaCalss_02.png
create mode 100644 手太欠/优迪尔-小程序/static/img/teaCalss_03.png
create mode 100644 手太欠/优迪尔-小程序/static/img/userTel_icon.png
create mode 100644 手太欠/优迪尔-小程序/static/img/user_row.png
create mode 100644 手太欠/优迪尔-小程序/static/img/videoIcon.png
create mode 100644 手太欠/优迪尔-小程序/static/tabBarIcon/stuTabBar_00.png
create mode 100644 手太欠/优迪尔-小程序/static/tabBarIcon/stuTabBar_00_active.png
create mode 100644 手太欠/优迪尔-小程序/static/tabBarIcon/stuTabBar_01.png
create mode 100644 手太欠/优迪尔-小程序/static/tabBarIcon/stuTabBar_01_active.png
create mode 100644 手太欠/优迪尔-小程序/static/tabBarIcon/teaTabBar_00.png
create mode 100644 手太欠/优迪尔-小程序/static/tabBarIcon/teaTabBar_00_active.png
create mode 100644 手太欠/优迪尔-小程序/static/tabBarIcon/teaTabBar_01.png
create mode 100644 手太欠/优迪尔-小程序/static/tabBarIcon/teaTabBar_01_active.png
create mode 100644 手太欠/优迪尔-小程序/static/tabBarIcon/teaTabBar_02.png
create mode 100644 手太欠/优迪尔-小程序/static/tabBarIcon/teaTabBar_02_active.png
create mode 100644 手太欠/优迪尔-小程序/utils/outTime.js
create mode 100644 手太欠/优迪尔-小程序/utils/qqmap-wx-jssdk.min.js
create mode 100644 手太欠/优迪尔-小程序/utils/util.js
diff --git a/手太欠/优迪尔-小程序/api/err.js b/手太欠/优迪尔-小程序/api/err.js
new file mode 100644
index 0000000..a1043ed
--- /dev/null
+++ b/手太欠/优迪尔-小程序/api/err.js
@@ -0,0 +1,54 @@
+
+/**
+ * 处理错误信息
+ * @property {Object} errInfo
+ */
+
+const errInfo = (obj) =>{
+ if(obj.status_code == 401){
+ wx.showModal({
+ title : "登录提示",
+ content : "长时间未操作,登录已过期,请重新登录",
+ showCancel : false,
+ confirmColor: "#0b0041",
+ confirmText : "确定",
+ success : ()=>{
+ // 清理客户端登录缓存
+ wx.removeStorageSync("token")
+ // 返回首页
+ wx.redirectTo({
+ url: "/pages/login/index"
+ })
+ }
+ })
+ }else if(obj.status_code == 422){
+ wx.showToast({
+ title: obj.message,
+ icon : "none"
+ })
+ }else if(obj.status_code == 400 || obj.status_code == 0){
+ wx.showToast({
+ title: obj.message,
+ icon : "none"
+ })
+ }else if(obj.status_code == 404){
+ wx.showToast({
+ title: "接口地址不存在,请联系系统管理员",
+ icon : "none"
+ })
+ }else if(obj.status_code == 500){
+ wx.showToast({
+ title: "服务端:" + obj.message,
+ icon : "none"
+ })
+ }else {
+ wx.showToast({
+ title: "code:" + obj.status_code + ", msg:" + obj.message,
+ icon : "none"
+ })
+ }
+}
+
+module.exports = {
+ errInfo
+}
diff --git a/手太欠/优迪尔-小程序/api/index.js b/手太欠/优迪尔-小程序/api/index.js
new file mode 100644
index 0000000..7da1ed3
--- /dev/null
+++ b/手太欠/优迪尔-小程序/api/index.js
@@ -0,0 +1,24 @@
+
+/*
+ * 手太欠
+ * U迪尔 v1.0.0 (2021-4-20 09:25:32)
+ * https://www.lvmeimall.com
+ */
+
+import auth from "./interfaces/auth"
+import stuIndex from "./interfaces/stuIndex"
+import teaIndex from "./interfaces/teaIndex"
+import stuUsers from "./interfaces/stuUsers"
+import teaUsers from "./interfaces/teaUsers"
+import address from "./interfaces/address"
+import file from "./interfaces/file"
+
+export default{
+ auth,
+ stuIndex,
+ teaIndex,
+ stuUsers,
+ teaUsers,
+ address,
+ file
+}
diff --git a/手太欠/优迪尔-小程序/api/interfaces/address.js b/手太欠/优迪尔-小程序/api/interfaces/address.js
new file mode 100644
index 0000000..43a4ebb
--- /dev/null
+++ b/手太欠/优迪尔-小程序/api/interfaces/address.js
@@ -0,0 +1,6 @@
+
+import {req} from "../request"
+const province = (area) => req({url: "areas", data:{area : area}}) //省市区选择
+export default({
+ province
+})
diff --git a/手太欠/优迪尔-小程序/api/interfaces/auth.js b/手太欠/优迪尔-小程序/api/interfaces/auth.js
new file mode 100644
index 0000000..38543d5
--- /dev/null
+++ b/手太欠/优迪尔-小程序/api/interfaces/auth.js
@@ -0,0 +1,10 @@
+import {req} from "../request"
+const login = data => req({url: "auth/login", method: "POST", data: data}) //登录
+const register = (class_id,mobileNo,code,nickname,province_id,city_id,district_id,school) => req({url: "auth/register", method: "POST", data:{class_id:class_id, mobileNo:mobileNo, code:code, nickname:nickname, province_id:province_id,city_id:city_id, district_id:district_id, school:school}}) //注册
+const sms = (mobileNo) => req({url: "sms", method: "POST", data:{mobileNo : mobileNo}}) //验证码
+
+export default({
+ login,
+ register,
+ sms
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/api/interfaces/file.js b/手太欠/优迪尔-小程序/api/interfaces/file.js
new file mode 100644
index 0000000..4b967d1
--- /dev/null
+++ b/手太欠/优迪尔-小程序/api/interfaces/file.js
@@ -0,0 +1,11 @@
+
+/*
+ * 图图片上传公用接口
+ */
+import {upload} from "../request"
+
+const uploadImg = (imgPaht) => upload({url: "storages", method: "POST", key: "image", path: imgPaht}) //上传图片
+
+export default({
+ uploadImg
+})
diff --git a/手太欠/优迪尔-小程序/api/interfaces/stuIndex.js b/手太欠/优迪尔-小程序/api/interfaces/stuIndex.js
new file mode 100644
index 0000000..c484c87
--- /dev/null
+++ b/手太欠/优迪尔-小程序/api/interfaces/stuIndex.js
@@ -0,0 +1,13 @@
+
+import {req} from "../request"
+const index = (page) => req({url: "student", data:{page : page}}) //首页列表
+const stuLevel = (level_id, page) => req({url: "student/" + level_id + '/courses', data:{page : page}}) //课程列表-二级
+const stuSections = (course_id, page) => req({url: "student/" + course_id + '/sections', data:{page : page}}) //课程列表-二级-章节列表
+const stuDet = (section_id) => req({url: "student/" + section_id + '/section'}) //课程列表-二级-章节详情
+
+export default({
+ index,
+ stuLevel,
+ stuSections,
+ stuDet
+})
diff --git a/手太欠/优迪尔-小程序/api/interfaces/stuUsers.js b/手太欠/优迪尔-小程序/api/interfaces/stuUsers.js
new file mode 100644
index 0000000..7555d37
--- /dev/null
+++ b/手太欠/优迪尔-小程序/api/interfaces/stuUsers.js
@@ -0,0 +1,10 @@
+
+import {req} from "../request"
+const index = () => req({url: "student/user"}) //用户信息
+const cover = data => req({url: "user/setting/cover", method: "PUT", data: data}) //修改头像
+const mobile = (mobileNo,code) => req({url: "student/user/mobile", method: "PUT", data:{mobileNo : mobileNo,code:code}}) //更换手机号
+export default({
+ index,
+ cover,
+ mobile
+})
diff --git a/手太欠/优迪尔-小程序/api/interfaces/teaIndex.js b/手太欠/优迪尔-小程序/api/interfaces/teaIndex.js
new file mode 100644
index 0000000..c5695d8
--- /dev/null
+++ b/手太欠/优迪尔-小程序/api/interfaces/teaIndex.js
@@ -0,0 +1,54 @@
+
+import {req} from "../request"
+const index = (category_id, page) => req({url: "teacher/services", data:{category_id : category_id, page : page}}) //课程服务列表
+const activity = (category_id, page) => req({url: "teacher/services/" + category_id + '/list', data:{page : page}}) //课程服务活动列表
+const detailed = (active_id, page) => req({url: "teacher/services/" + active_id, data:{page : page}}) //课程服务活动详情
+const classList = (page) => req({url: "teacher", data:{page : page}}) //课程列表
+const courses = (learn_id, page) => req({url: "teacher/" + learn_id + '/courses', data:{page : page}}) //课程列表-二级页
+const coursedet = (course_id) => req({url: "teacher/course/" + course_id + '/detail'}) //课程详情
+const section = (learn_course_id, page) => req({url: "teacher/" + learn_course_id + '/sections', data:{page : page}}) //章节列表
+const detail = (teacher_learn_section_id) => req({url: "teacher/section/" + teacher_learn_section_id + '/detail'}) //章节列表
+const extralPlan= (section) => req({url: "teacher/section/" + section + '/extral/plan'}) //课程教案
+const extralArch= (section) => req({url: "teacher/section/" + section + '/extral/architecture'}) //课程搭建图
+const grades = (page) => req({url: "teacher/class", data:{page : page}}) //班级列表
+const gradesDet = (active_id) => req({url: "teacher/class/" + active_id}) //班级列表-详情
+const students = (class_id,page) => req({url: "teacher/class/" + class_id + '/students', data:{page : page}}) //学生列表
+const classPut = (class_id,title) => req({url: "teacher/class/" + class_id, method: "PUT", data:{title : title}}) //修改班级名称
+const gradesAdd = (title) => req({url: "teacher/class", method: "POST", data:{title : title}}) //新建班级名称
+const remove = (class_id) => req({url: "teacher/class/" + class_id, method: "delete"}) //班级删除
+const studentDet = (student_id) => req({url: "teacher/class/" + student_id + '/student'}) //学生详情
+const studentDel = (student_id) => req({url: "teacher/class/" + student_id + '/student', method: "delete"}) //学生删除
+
+// 此部分为教师端-班级-课后复习
+const teach = (class_id,page) => req({url: "teacher/class/" + class_id + '/teach', data:{page : page}}) //课后复习
+const teachLevel = (class_id,level_id,page) => req({url: "teacher/class/" + class_id + '/teach/' + level_id + '/courses', data:{page : page}}) //课后复习-阶段列表
+const teachSection = (class_id,teach_course_id,page) => req({url: "teacher/class/" + class_id + '/teach/' + teach_course_id + '/sections', data:{page : page}}) //课后复习-阶段列表-章节列表
+const teachSecDet = (class_id,teacher_learn_section_id) => req({url: "teacher/class/" + class_id + '/teach/' + teacher_learn_section_id + '/section'}) //课后复习-阶段列表-章节详情
+const teachLock = (class_id,teacher_learn_section_id) => req({url: "teacher/class/" + class_id + '/teach/' + teacher_learn_section_id + '/sectionunlock', method: "POST"}) //课后复习-阶段列表-章节详情-解锁
+
+
+export default({
+ index,
+ activity,
+ detailed,
+ classList,
+ courses,
+ coursedet,
+ section,
+ detail,
+ extralPlan,
+ extralArch,
+ grades,
+ gradesDet,
+ students,
+ classPut,
+ gradesAdd,
+ remove,
+ studentDet,
+ studentDel,
+ teach,
+ teachLevel,
+ teachSection,
+ teachSecDet,
+ teachLock
+})
diff --git a/手太欠/优迪尔-小程序/api/interfaces/teaUsers.js b/手太欠/优迪尔-小程序/api/interfaces/teaUsers.js
new file mode 100644
index 0000000..1ec775d
--- /dev/null
+++ b/手太欠/优迪尔-小程序/api/interfaces/teaUsers.js
@@ -0,0 +1,16 @@
+
+import {req} from "../request"
+const index = () => req({url: "teacher/user"}) //用户信息
+const suggest = (page) => req({url: "suggests/suggest", data:{page : page}}) //意见
+const complain = (page) => req({url: "suggests/complain", data:{page : page}}) //建议
+const suggestForm = (content) => req({url: "suggests/suggest", method: "POST", data:{content : content}}) //意见提交
+const complainForm = (content) => req({url: "suggests/complain", method: "POST", data:{content : content}}) //建议提交
+const students = (page) => req({url: "teacher/students", data:{page : page}}) //学生列表
+export default({
+ index,
+ suggest,
+ complain,
+ suggestForm,
+ complainForm,
+ students
+})
diff --git a/手太欠/优迪尔-小程序/api/request.js b/手太欠/优迪尔-小程序/api/request.js
new file mode 100644
index 0000000..b888b29
--- /dev/null
+++ b/手太欠/优迪尔-小程序/api/request.js
@@ -0,0 +1,130 @@
+import {errInfo} from './err'
+import {updToken} from './updateToken'
+
+// 请求方式配置
+const api = "https://sandbox.uideajg.cn/api/" //正式地址
+const header = {
+ "Accept" : "application/json"
+}
+
+/**
+ * 请求
+ * @property {Object} req
+ */
+
+const req = (obj) => {
+ // 处理请求信息
+ return new Promise((resolve, reject) => {
+ // 组合header
+ if(obj.header && obj.header['Authorization']){
+ obj.header['Accept'] = "application/json"
+ }else{
+ obj.header = {
+ "Accept" : "application/json",
+ "Authorization" : wx.getStorageSync("token") || ""
+ }
+ }
+
+ // 处理数据请求
+ wx.showLoading({
+ title: "加载中..",
+ mask : true
+ })
+
+ wx.request({
+ url : api + obj.url,
+ header : obj.header || {},
+ method : obj.method || 'GET',
+ data : obj.data || {},
+ success : res => {
+ if(res.header.Authorization){
+ // 更新全局存储器
+ getApp().globalData.token = res.header.Authorization
+ // 更新客户端登录缓存
+ wx.setStorageSync('token', res.header.Authorization)
+ }
+ wx.hideLoading();
+ if(res.data.status_code == 200){
+ resolve(res.data)
+ }else if(res.data.status_code == 401 || res.data.status_code == 0){
+ errInfo(res.data)
+ }else if(res.data.status_code == 400){
+ errInfo(res.data)
+ reject(res.data.message)
+ }else if(res.data.status_code == 404){
+ wx.showToast({
+ title: "接口地址不存在,请联系系统管理员",
+ icon : "none"
+ })
+ }else{
+ wx.showToast({
+ title: res.data.message,
+ icon : "none"
+ })
+ }
+ },
+ fail : err => {
+ wx.showToast({
+ title: "服务端错误",
+ icon : "none"
+ })
+ reject(err)
+ }
+ })
+ })
+}
+
+
+/**
+ * 上传
+ * @property {Object} upload
+ */
+
+const upload = (obj) => {
+ // header
+ header.Authorization = wx.getStorageSync("token") || ""
+ // 处理上传信息
+ return new Promise((resolve, reject) => {
+ wx.showLoading({
+ title: "上传中..",
+ mask: true
+ })
+ wx.uploadFile({
+ url : api + obj.url,
+ header : header,
+ name : obj.key || "",
+ filePath: obj.path || "",
+ formData: obj.data || {},
+ success : res=>{
+ wx.hideLoading();
+ // 处理返回值
+ let jsonData = JSON.parse(res.data)
+ // 更新token
+ if (res.header.Authorization) updToken(res.header.Authorization)
+ // 处理信息
+ if (jsonData.status_code == 200) {
+ resolve(jsonData.data)
+ } else {
+ if (jsonData.status_code == 401) {
+ reject({
+ login: false
+ })
+ }
+ errInfo(jsonData)
+ }
+ },
+ fail : err=>{
+ wx.showToast({
+ title : err.errMsg,
+ icon : "none"
+ })
+ reject(err)
+ }
+ })
+ })
+}
+
+module.exports = {
+ req,
+ upload
+}
diff --git a/手太欠/优迪尔-小程序/api/updateToken.js b/手太欠/优迪尔-小程序/api/updateToken.js
new file mode 100644
index 0000000..8207d76
--- /dev/null
+++ b/手太欠/优迪尔-小程序/api/updateToken.js
@@ -0,0 +1,17 @@
+
+/**
+ * 更新token
+ * @property {String} updToken
+ */
+
+const updToken = (token) =>{
+ // 更新全局存储器
+ getApp().globalData.token = token
+ // 更新客户端登录缓存
+ wx.setStorageSync('token', token)
+}
+
+module.exports = {
+ updToken
+}
+
diff --git a/手太欠/优迪尔-小程序/app.js b/手太欠/优迪尔-小程序/app.js
new file mode 100644
index 0000000..4859f21
--- /dev/null
+++ b/手太欠/优迪尔-小程序/app.js
@@ -0,0 +1,52 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+import api from "api/index"
+
+var QQMapWX = require('utils/qqmap-wx-jssdk.min.js');
+var qqmapsdk;
+
+
+App({
+ onLaunch() {
+ // 获取系统信息
+ this.globalData.statusBarHeight = wx.getSystemInfoSync().statusBarHeight
+ qqmapsdk = new QQMapWX({
+ key: '2IQBZ-SJECS-D6OOS-6M63W-GYHG2-ZIFOX'
+ })
+
+ // 检查用户登录状态
+ const token = wx.getStorageSync("token")
+ if(token){
+ this.globalData.isUser = true
+ }
+
+ // 获取系统信息
+ wx.getSystemInfo({
+ success: res=>{
+ this.globalData.systInfo = {
+ statusBarHeight: res.statusBarHeight,
+ safeArea : res.safeArea
+ }
+ }
+ })
+
+ // 挂载api
+ wx.$api = api
+ wx.$qqmapsdk = qqmapsdk
+ },
+
+ onShow(){
+ wx.hideShareMenu();
+ },
+
+ globalData: {
+ isUser : false,
+ userInfo : null,
+ statusBarHeight : 0,
+ token : "",
+ list : [], // 存放自定义tabBar
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/app.json b/手太欠/优迪尔-小程序/app.json
new file mode 100644
index 0000000..a354e04
--- /dev/null
+++ b/手太欠/优迪尔-小程序/app.json
@@ -0,0 +1,46 @@
+{
+ "pages": [
+ "pages/login/index",
+ "pages/stuIndex/index",
+ "pages/stuUser/index",
+ "pages/publicCourse/index",
+ "pages/publicChapter/index",
+ "pages/publicDetails/index",
+ "pages/publicReview/index",
+ "pages/userSetting/index",
+ "pages/userHead/index",
+ "pages/userTel/index",
+ "pages/teaIndex/index",
+ "pages/teaUser/index",
+ "pages/teaClass/index",
+ "pages/teaDetails/index",
+ "pages/teaClass-details/index",
+ "pages/teaSchool/index",
+ "pages/teaClass-select/index",
+ "pages/teaClass-build/index",
+ "pages/teaActivity/index",
+ "pages/teaActivity-list/index",
+ "pages/teaActivity-details/index",
+ "pages/teaStudent-list/index",
+ "pages/teaStudent-details/index",
+ "pages/teaClass-form/index",
+ "pages/teaFeedback/index",
+ "pages/register/index",
+ "pages/teaFeedback-form/index"
+ ],
+ "window": {
+ "navigationBarBackgroundColor": "#fff",
+ "navigationBarTitleText": "优迪尔在线教育",
+ "navigationBarTextStyle": "black"
+ },
+ "usingComponents": {
+ "userTabBar": "/custom-tab-bar/index"
+ },
+ "style": "v2",
+ "sitemapLocation": "sitemap.json",
+ "permission": {
+ "scope.userLocation": {
+ "desc": "你的位置信息将用于小程序位置接口的效果展示"
+ }
+ }
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/app.wxss b/手太欠/优迪尔-小程序/app.wxss
new file mode 100644
index 0000000..0238427
--- /dev/null
+++ b/手太欠/优迪尔-小程序/app.wxss
@@ -0,0 +1,186 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+page {
+ background: #f8f8f8;
+}
+
+/*
+ * 文字截取
+ */
+
+.nowrap {
+ max-width: 100%;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+.nowrap-multi {
+ display: -webkit-box;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+}
+
+/*
+ * 水平居中
+ */
+
+.pack-center {
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-box-pack: center;
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ z-index: -1;
+}
+
+/*
+ * Tabar距离
+ */
+.spaceTabar {
+ border-bottom: 68px solid transparent;
+ margin-bottom: env(safe-area-inset-bottom);
+}
+
+
+/*
+ * 页面信息提醒
+ */
+
+.pages-hint,
+.pages-loding {
+ text-align: center;
+ color: #747788;
+ font-size: 28rpx;
+ background: white;
+}
+
+.pages-hint image {
+ width: 188rpx;
+ height: 188rpx;
+}
+
+.pages-loding image {
+ width: 38rpx;
+ height: 38rpx;
+}
+
+
+/* 一像素下边框 */
+.uni-border-down,
+.uni-border-top {
+ position: relative;
+}
+
+.uni-border-down::after {
+ position: absolute;
+ content: '';
+ left: 0;
+ bottom: 0;
+ background: #f2f2f2;
+ height: 2rpx;
+ width: 100%;
+}
+
+/* 一像素上边框 */
+.uni-border-top::before {
+ position: absolute;
+ content: '';
+ left: 0;
+ top: 0;
+ background: #f2f2f2;
+ height: 2rpx;
+ width: 100%;
+}
+
+/*
+ * 水平居中
+ */
+
+ .pack-center {
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-box-pack: center;
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ z-index: -1;
+}
+
+/*
+ * 页面信息提醒
+ */
+
+ .pages-hint {
+ text-align: center;
+ color: #747788;
+ font-size: 28rpx;
+ background: white;
+}
+
+.pages-hint image {
+ width: 188rpx;
+ height: 188rpx;
+}
+
+/*
+ * iphoneX footer
+ */
+
+ .iphoneX{
+ padding-bottom: 68rpx;
+}
+
+.loginBack {
+ position: fixed;
+ left: 0;
+ width: 100%;
+ height: calc(100% - 45px);
+ background: white;
+ text-align: center;
+}
+
+.loginIcon {
+ width: 200rpx;
+ height: 200rpx;
+ margin: 40% auto 80rpx;
+ display: block;
+}
+
+.loginUrl {
+ background: linear-gradient(to right, #fe4d4e, #ff2d8f);
+ color: #fff;
+ display: inline-block;
+ padding: 0 30rpx;
+ border-radius: 10rpx;
+ font-size: 26rpx;
+ height: 68rpx;
+ line-height: 68rpx;
+}
+
+
+/* 上拉加载 */
+.pagesLoding{
+ text-align: center;
+ line-height: 90rpx;
+ color: gray;
+ font-size: 28rpx;
+}
+
+.pagesLoding-icon{
+ width: 28rpx;
+ height: 28rpx;
+ vertical-align: middle;
+ margin-right: 10rpx;
+ margin-bottom: 3rpx;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.js b/手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.js
new file mode 100644
index 0000000..6957179
--- /dev/null
+++ b/手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.js
@@ -0,0 +1,1120 @@
+Component({
+ properties: {
+ /**
+ * 图片路径
+ */
+ 'imgSrc': {
+ type: String
+ },
+ /**
+ * 裁剪框高度
+ */
+ 'height': {
+ type: Number,
+ value: 200
+ },
+ /**
+ * 裁剪框宽度
+ */
+ 'width': {
+ type: Number,
+ value: 200
+ },
+ /**
+ * 裁剪框最小尺寸
+ */
+ 'min_width': {
+ type: Number,
+ value: 100
+ },
+ 'min_height': {
+ type: Number,
+ value: 100
+ },
+ /**
+ * 裁剪框最大尺寸
+ */
+ 'max_width': {
+ type: Number,
+ value: 300
+ },
+ 'max_height': {
+ type: Number,
+ value: 300
+ },
+ /**
+ * 裁剪框禁止拖动
+ */
+ 'disable_width': {
+ type: Boolean,
+ value: false
+ },
+ 'disable_height': {
+ type: Boolean,
+ value: false
+ },
+ /**
+ * 锁定裁剪框比例
+ */
+ 'disable_ratio':{
+ type: Boolean,
+ value: false
+ },
+ /**
+ * 生成的图片尺寸相对剪裁框的比例
+ */
+ 'export_scale': {
+ type: Number,
+ value: 3
+ },
+ /**
+ * 生成的图片质量0-1
+ */
+ 'quality': {
+ type: Number,
+ value: 1
+ },
+ 'cut_top': {
+ type: Number,
+ value: null
+ },
+ 'cut_left': {
+ type: Number,
+ value: null
+ },
+ /**
+ * canvas上边距(不设置默认不显示)
+ */
+ 'canvas_top': {
+ type: Number,
+ value: null
+ },
+ /**
+ * canvas左边距(不设置默认不显示)
+ */
+ 'canvas_left': {
+ type: Number,
+ value: null
+ },
+ /**
+ * 图片宽度
+ */
+ 'img_width': {
+ type: null,
+ value: null
+ },
+ /**
+ * 图片高度
+ */
+ 'img_height': {
+ type: null,
+ value: null
+ },
+ /**
+ * 图片缩放比
+ */
+ 'scale': {
+ type: Number,
+ value: 1
+ },
+ /**
+ * 图片旋转角度
+ */
+ 'angle': {
+ type: Number,
+ value: 0
+ },
+ /**
+ * 最小缩放比
+ */
+ 'min_scale': {
+ type: Number,
+ value: 0.5
+ },
+ /**
+ * 最大缩放比
+ */
+ 'max_scale': {
+ type: Number,
+ value: 2
+ },
+ /**
+ * 是否禁用旋转
+ */
+ 'disable_rotate': {
+ type: Boolean,
+ value: false
+ },
+ /**
+ * 是否限制移动范围(剪裁框只能在图片内)
+ */
+ 'limit_move':{
+ type: Boolean,
+ value: false
+ }
+ },
+ data: {
+ el: 'image-cropper', //暂时无用
+ info: wx.getSystemInfoSync(),
+ MOVE_THROTTLE:null,//触摸移动节流settimeout
+ MOVE_THROTTLE_FLAG: true,//节流标识
+ INIT_IMGWIDTH: 0, //图片设置尺寸,此值不变(记录最初设定的尺寸)
+ INIT_IMGHEIGHT: 0, //图片设置尺寸,此值不变(记录最初设定的尺寸)
+ TIME_BG: null,//背景变暗延时函数
+ TIME_CUT_CENTER:null,
+ _touch_img_relative: [{
+ x: 0,
+ y: 0
+ }], //鼠标和图片中心的相对位置
+ _flag_cut_touch:false,//是否是拖动裁剪框
+ _hypotenuse_length: 0, //双指触摸时斜边长度
+ _flag_img_endtouch: false, //是否结束触摸
+ _flag_bright: true, //背景是否亮
+ _canvas_overflow:true,//canvas缩略图是否在屏幕外面
+ _canvas_width:200,
+ _canvas_height:200,
+ origin_x: 0.5, //图片旋转中心
+ origin_y: 0.5, //图片旋转中心
+ _cut_animation: false,//是否开启图片和裁剪框过渡
+ _img_top: wx.getSystemInfoSync().windowHeight / 2, //图片上边距
+ _img_left: wx.getSystemInfoSync().windowWidth / 2, //图片左边距
+ watch: {
+ //监听截取框宽高变化
+ width(value, that) {
+ if (value < that.data.min_width){
+ that.setData({
+ width: that.data.min_width
+ });
+ }
+ that._computeCutSize();
+ },
+ height(value, that) {
+ if (value < that.data.min_height) {
+ that.setData({
+ height: that.data.min_height
+ });
+ }
+ that._computeCutSize();
+ },
+ angle(value, that){
+ //停止居中裁剪框,继续修改图片位置
+ that._moveStop();
+ if(that.data.limit_move){
+ if (that.data.angle % 90) {
+ that.setData({
+ angle: Math.round(that.data.angle / 90) * 90
+ });
+ return;
+ }
+ }
+ },
+ _cut_animation(value, that){
+ //开启过渡300毫秒之后自动关闭
+ clearTimeout(that.data._cut_animation_time);
+ if (value){
+ that.data._cut_animation_time = setTimeout(()=>{
+ that.setData({
+ _cut_animation:false
+ });
+ },300)
+ }
+ },
+ limit_move(value, that){
+ if (value) {
+ if (that.data.angle%90){
+ that.setData({
+ angle: Math.round(that.data.angle / 90)*90
+ });
+ }
+ that._imgMarginDetectionScale();
+ !that.data._canvas_overflow && that._draw();
+ }
+ },
+ canvas_top(value, that){
+ that._canvasDetectionPosition();
+ },
+ canvas_left(value, that){
+ that._canvasDetectionPosition();
+ },
+ imgSrc(value, that){
+ that.pushImg();
+ },
+ cut_top(value, that) {
+ that._cutDetectionPosition();
+ if (that.data.limit_move) {
+ !that.data._canvas_overflow && that._draw();
+ }
+ },
+ cut_left(value, that) {
+ that._cutDetectionPosition();
+ if (that.data.limit_move) {
+ !that.data._canvas_overflow && that._draw();
+ }
+ }
+ }
+ },
+ attached() {
+ this.data.info = wx.getSystemInfoSync();
+ //启用数据监听
+ this._watcher();
+ this.data.INIT_IMGWIDTH = this.data.img_width;
+ this.data.INIT_IMGHEIGHT = this.data.img_height;
+ this.setData({
+ _canvas_height: this.data.height,
+ _canvas_width: this.data.width,
+ });
+ this._initCanvas();
+ this.data.imgSrc && (this.data.imgSrc = this.data.imgSrc);
+ //根据开发者设置的图片目标尺寸计算实际尺寸
+ this._initImageSize();
+ //设置裁剪框大小>设置图片尺寸>绘制canvas
+ this._computeCutSize();
+ //检查裁剪框是否在范围内
+ this._cutDetectionPosition();
+ //检查canvas是否在范围内
+ this._canvasDetectionPosition();
+ //初始化完成
+ this.triggerEvent('load', {
+ cropper: this
+ });
+ },
+ methods: {
+ /**
+ * 上传图片
+ */
+ upload() {
+ let that = this;
+ wx.chooseImage({
+ count: 1,
+ sizeType: ['original', 'compressed'],
+ sourceType: ['album', 'camera'],
+ success(res) {
+ const tempFilePaths = res.tempFilePaths[0];
+ that.pushImg(tempFilePaths);
+ wx.showLoading({
+ title: '加载中...'
+ })
+ }
+ })
+ },
+ /**
+ * 返回图片信息
+ */
+ getImg(getCallback) {
+ this._draw(()=>{
+ wx.canvasToTempFilePath({
+ width: this.data.width * this.data.export_scale,
+ height: Math.round(this.data.height * this.data.export_scale),
+ destWidth: this.data.width * this.data.export_scale,
+ destHeight: Math.round(this.data.height) * this.data.export_scale,
+ fileType: 'png',
+ quality: this.data.quality,
+ canvasId: this.data.el,
+ success: (res) => {
+ getCallback({
+ url: res.tempFilePath,
+ width: this.data.width * this.data.export_scale,
+ height: this.data.height * this.data.export_scale
+ });
+ }
+ }, this)
+ });
+ },
+ /**
+ * 设置图片动画
+ * {
+ * x:10,//图片在原有基础上向下移动10px
+ * y:10,//图片在原有基础上向右移动10px
+ * angle:10,//图片在原有基础上旋转10deg
+ * scale:0.5,//图片在原有基础上增加0.5倍
+ * }
+ */
+ setTransform(transform) {
+ if (!transform) return;
+ if (!this.data.disable_rotate){
+ this.setData({
+ angle: transform.angle ? this.data.angle + transform.angle : this.data.angle
+ });
+ }
+ var scale = this.data.scale;
+ if (transform.scale) {
+ scale = this.data.scale + transform.scale;
+ scale = scale <= this.data.min_scale ? this.data.min_scale : scale;
+ scale = scale >= this.data.max_scale ? this.data.max_scale : scale;
+ }
+ this.data.scale = scale;
+ let cutX = this.data.cut_left;
+ let cutY = this.data.cut_top;
+ if (transform.cutX){
+ this.setData({
+ cut_left: cutX + transform.cutX
+ });
+ this.data.watch.cut_left(null, this);
+ }
+ if (transform.cutY){
+ this.setData({
+ cut_top: cutY + transform.cutY
+ });
+ this.data.watch.cut_top(null, this);
+ }
+ this.data._img_top = transform.y ? this.data._img_top + transform.y : this.data._img_top;
+ this.data._img_left = transform.x ? this.data._img_left + transform.x : this.data._img_left;
+ //图像边缘检测,防止截取到空白
+ this._imgMarginDetectionScale();
+ //停止居中裁剪框,继续修改图片位置
+ this._moveDuring();
+ this.setData({
+ scale: this.data.scale,
+ _img_top: this.data._img_top,
+ _img_left: this.data._img_left
+ });
+ !this.data._canvas_overflow && this._draw();
+ //可以居中裁剪框了
+ this._moveStop();//结束操作
+ },
+ /**
+ * 设置剪裁框位置
+ */
+ setCutXY(x,y){
+ this.setData({
+ cut_top: y,
+ cut_left:x
+ });
+ },
+ /**
+ * 设置剪裁框尺寸
+ */
+ setCutSize(w,h){
+ this.setData({
+ width: w,
+ height:h
+ });
+ this._computeCutSize();
+ },
+ /**
+ * 设置剪裁框和图片居中
+ */
+ setCutCenter() {
+ let cut_top = (this.data.info.windowHeight - this.data.height) * 0.5;
+ let cut_left = (this.data.info.windowWidth - this.data.width) * 0.5;
+ //顺序不能变
+ this.setData({
+ _img_top: this.data._img_top - this.data.cut_top + cut_top,
+ cut_top: cut_top, //截取的框上边距
+ _img_left: this.data._img_left - this.data.cut_left + cut_left,
+ cut_left: cut_left, //截取的框左边距
+ });
+ },
+ _setCutCenter(){
+ let cut_top = (this.data.info.windowHeight - this.data.height) * 0.5;
+ let cut_left = (this.data.info.windowWidth - this.data.width) * 0.5;
+ this.setData({
+ cut_top: cut_top, //截取的框上边距
+ cut_left: cut_left, //截取的框左边距
+ });
+ },
+ /**
+ * 设置剪裁框宽度-即将废弃
+ */
+ setWidth(width) {
+ this.setData({
+ width: width
+ });
+ this._computeCutSize();
+ },
+ /**
+ * 设置剪裁框高度-即将废弃
+ */
+ setHeight(height) {
+ this.setData({
+ height: height
+ });
+ this._computeCutSize();
+ },
+ /**
+ * 是否锁定旋转
+ */
+ setDisableRotate(value){
+ this.data.disable_rotate = value;
+ },
+ /**
+ * 是否限制移动
+ */
+ setLimitMove(value){
+ this.setData({
+ _cut_animation: true,
+ limit_move: !!value
+ });
+ },
+ /**
+ * 初始化图片,包括位置、大小、旋转角度
+ */
+ imgReset() {
+ this.setData({
+ scale: 1,
+ angle: 0,
+ _img_top: wx.getSystemInfoSync().windowHeight / 2,
+ _img_left: wx.getSystemInfoSync().windowWidth / 2,
+ })
+ },
+ /**
+ * 加载(更换)图片
+ */
+ pushImg(src) {
+ if (src) {
+ this.setData({
+ imgSrc: src
+ });
+ //发现是手动赋值直接返回,交给watch处理
+ return;
+ }
+
+ // getImageInfo接口传入 src: '' 会导致内存泄漏
+
+ if (!this.data.imgSrc) return;
+ wx.getImageInfo({
+ src: this.data.imgSrc,
+ success: (res) => {
+ this.data.imageObject = res;
+ //图片非本地路径需要换成本地路径
+ if (this.data.imgSrc.search(/tmp/) == -1){
+ this.setData({
+ imgSrc: res.path
+ });
+ }
+ //计算最后图片尺寸
+ this._imgComputeSize();
+ if (this.data.limit_move) {
+ //限制移动,不留空白处理
+ this._imgMarginDetectionScale();
+ }
+ this._draw();
+ },
+ fail: (err) => {
+ this.setData({
+ imgSrc: ''
+ });
+ }
+ });
+ },
+ imageLoad(e){
+ setTimeout(()=>{
+ this.triggerEvent('imageload', this.data.imageObject);
+
+ },1000)
+ },
+ /**
+ * 设置图片放大缩小
+ */
+ setScale(scale) {
+ if (!scale) return;
+ this.setData({
+ scale: scale
+ });
+ !this.data._canvas_overflow && this._draw();
+ },
+ /**
+ * 设置图片旋转角度
+ */
+ setAngle(angle) {
+ if (!angle) return;
+ this.setData({
+ _cut_animation: true,
+ angle: angle
+ });
+ this._imgMarginDetectionScale();
+ !this.data._canvas_overflow && this._draw();
+ },
+ _initCanvas() {
+ //初始化canvas
+ if (!this.data.ctx){
+ this.data.ctx = wx.createCanvasContext("image-cropper", this);
+ }
+ },
+ /**
+ * 根据开发者设置的图片目标尺寸计算实际尺寸
+ */
+ _initImageSize(){
+ //处理宽高特殊单位 %>px
+ if (this.data.INIT_IMGWIDTH && typeof this.data.INIT_IMGWIDTH == "string" && this.data.INIT_IMGWIDTH.indexOf("%") != -1) {
+ let width = this.data.INIT_IMGWIDTH.replace("%", "");
+ this.data.INIT_IMGWIDTH = this.data.img_width = this.data.info.windowWidth / 100 * width;
+ }
+ if (this.data.INIT_IMGHEIGHT && typeof this.data.INIT_IMGHEIGHT == "string" && this.data.INIT_IMGHEIGHT.indexOf("%") != -1) {
+ let height = this.data.img_height.replace("%", "");
+ this.data.INIT_IMGHEIGHT = this.data.img_height = this.data.info.windowHeight / 100 * height;
+ }
+ },
+ /**
+ * 检测剪裁框位置是否在允许的范围内(屏幕内)
+ */
+ _cutDetectionPosition(){
+ let _cutDetectionPositionTop = () => {
+ //检测上边距是否在范围内
+ if (this.data.cut_top < 0) {
+ this.setData({
+ cut_top: 0
+ });
+ }
+ if (this.data.cut_top > this.data.info.windowHeight - this.data.height) {
+ this.setData({
+ cut_top: this.data.info.windowHeight - this.data.height
+ });
+ }
+ }, _cutDetectionPositionLeft = () => {
+ //检测左边距是否在范围内
+ if (this.data.cut_left < 0) {
+ this.setData({
+ cut_left: 0
+ });
+ }
+ if (this.data.cut_left > this.data.info.windowWidth - this.data.width) {
+ this.setData({
+ cut_left: this.data.info.windowWidth - this.data.width
+ });
+ }
+ };
+ //裁剪框坐标处理(如果只写一个参数则另一个默认为0,都不写默认居中)
+ if (this.data.cut_top == null && this.data.cut_left == null) {
+ this._setCutCenter();
+ } else if (this.data.cut_top != null && this.data.cut_left != null){
+ _cutDetectionPositionTop();
+ _cutDetectionPositionLeft();
+ } else if (this.data.cut_top != null && this.data.cut_left == null) {
+ _cutDetectionPositionTop();
+ this.setData({
+ cut_left: (this.data.info.windowWidth - this.data.width) / 2
+ });
+ } else if (this.data.cut_top == null && this.data.cut_left != null) {
+ _cutDetectionPositionLeft();
+ this.setData({
+ cut_top: (this.data.info.windowHeight - this.data.height) / 2
+ });
+ }
+ },
+ /**
+ * 检测canvas位置是否在允许的范围内(屏幕内)如果在屏幕外则不开启实时渲染
+ * 如果只写一个参数则另一个默认为0,都不写默认超出屏幕外
+ */
+ _canvasDetectionPosition(){
+ if(this.data.canvas_top == null && this.data.canvas_left == null) {
+ this.data._canvas_overflow = false;
+ this.setData({
+ canvas_top: -5000,
+ canvas_left: -5000
+ });
+ }else if(this.data.canvas_top != null && this.data.canvas_left != null) {
+ if (this.data.canvas_top < - this.data.height || this.data.canvas_top > this.data.info.windowHeight) {
+ this.data._canvas_overflow = true;
+ } else {
+ this.data._canvas_overflow = false;
+ }
+ }else if(this.data.canvas_top != null && this.data.canvas_left == null) {
+ this.setData({
+ canvas_left: 0
+ });
+ } else if (this.data.canvas_top == null && this.data.canvas_left != null) {
+ this.setData({
+ canvas_top: 0
+ });
+ if (this.data.canvas_left < -this.data.width || this.data.canvas_left > this.data.info.windowWidth) {
+ this.data._canvas_overflow = true;
+ } else {
+ this.data._canvas_overflow = false;
+ }
+ }
+ },
+ /**
+ * 图片边缘检测-位置
+ */
+ _imgMarginDetectionPosition(scale) {
+ if (!this.data.limit_move) return;
+ let left = this.data._img_left;
+ let top = this.data._img_top;
+ var scale = scale || this.data.scale;
+ let img_width = this.data.img_width;
+ let img_height = this.data.img_height;
+ if (this.data.angle / 90 % 2) {
+ img_width = this.data.img_height;
+ img_height = this.data.img_width;
+ }
+ left = this.data.cut_left + img_width * scale / 2 >= left ? left : this.data.cut_left + img_width * scale / 2;
+ left = this.data.cut_left + this.data.width - img_width * scale / 2 <= left ? left : this.data.cut_left + this.data.width - img_width * scale / 2;
+ top = this.data.cut_top + img_height * scale / 2 >= top ? top : this.data.cut_top + img_height * scale / 2;
+ top = this.data.cut_top + this.data.height - img_height * scale / 2 <= top ? top : this.data.cut_top + this.data.height - img_height * scale / 2;
+ this.setData({
+ _img_left: left,
+ _img_top: top,
+ scale: scale
+ })
+ },
+ /**
+ * 图片边缘检测-缩放
+ */
+ _imgMarginDetectionScale(){
+ if (!this.data.limit_move)return;
+ let scale = this.data.scale;
+ let img_width = this.data.img_width;
+ let img_height = this.data.img_height;
+ if (this.data.angle / 90 % 2) {
+ img_width = this.data.img_height;
+ img_height = this.data.img_width;
+ }
+ if (img_width * scale < this.data.width){
+ scale = this.data.width / img_width;
+ }
+ if (img_height * scale < this.data.height) {
+ scale = Math.max(scale,this.data.height / img_height);
+ }
+ this._imgMarginDetectionPosition(scale);
+ },
+ _setData(obj) {
+ let data = {};
+ for (var key in obj) {
+ if (this.data[key] != obj[key]){
+ data[key] = obj[key];
+ }
+ }
+ this.setData(data);
+ return data;
+ },
+ /**
+ * 计算图片尺寸
+ */
+ _imgComputeSize() {
+ let img_width = this.data.img_width,
+ img_height = this.data.img_height;
+ if (!this.data.INIT_IMGHEIGHT && !this.data.INIT_IMGWIDTH) {
+ //默认按图片最小边 = 对应裁剪框尺寸
+ img_width = this.data.imageObject.width;
+ img_height = this.data.imageObject.height;
+ if (img_width / img_height > this.data.width / this.data.height){
+ img_height = this.data.height;
+ img_width = this.data.imageObject.width / this.data.imageObject.height * img_height;
+ }else{
+ img_width = this.data.width;
+ img_height = this.data.imageObject.height / this.data.imageObject.width * img_width;
+ }
+ } else if (this.data.INIT_IMGHEIGHT && !this.data.INIT_IMGWIDTH) {
+ img_width = this.data.imageObject.width / this.data.imageObject.height * this.data.INIT_IMGHEIGHT;
+ } else if (!this.data.INIT_IMGHEIGHT && this.data.INIT_IMGWIDTH) {
+ img_height = this.data.imageObject.height / this.data.imageObject.width * this.data.INIT_IMGWIDTH;
+ }
+ this.setData({
+ img_width: img_width,
+ img_height: img_height
+ });
+ },
+ //改变截取框大小
+ _computeCutSize() {
+ if (this.data.width > this.data.info.windowWidth) {
+ this.setData({
+ width: this.data.info.windowWidth,
+ });
+ } else if (this.data.width + this.data.cut_left > this.data.info.windowWidth){
+ this.setData({
+ cut_left: this.data.info.windowWidth - this.data.cut_left,
+ });
+ };
+ if (this.data.height > this.data.info.windowHeight) {
+ this.setData({
+ height: this.data.info.windowHeight,
+ });
+ } else if (this.data.height + this.data.cut_top > this.data.info.windowHeight){
+ this.setData({
+ cut_top: this.data.info.windowHeight - this.data.cut_top,
+ });
+ }
+ !this.data._canvas_overflow && this._draw();
+ },
+ //开始触摸
+ _start(event) {
+ this.data._flag_img_endtouch = false;
+ if (event.touches.length == 1) {
+ //单指拖动
+ this.data._touch_img_relative[0] = {
+ x: (event.touches[0].clientX - this.data._img_left),
+ y: (event.touches[0].clientY - this.data._img_top)
+ }
+ } else {
+ //双指放大
+ let width = Math.abs(event.touches[0].clientX - event.touches[1].clientX);
+ let height = Math.abs(event.touches[0].clientY - event.touches[1].clientY);
+ this.data._touch_img_relative = [{
+ x: (event.touches[0].clientX - this.data._img_left),
+ y: (event.touches[0].clientY - this.data._img_top)
+ }, {
+ x: (event.touches[1].clientX - this.data._img_left),
+ y: (event.touches[1].clientY - this.data._img_top)
+ }];
+ this.data._hypotenuse_length = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));
+ }
+ !this.data._canvas_overflow && this._draw();
+ },
+ _move_throttle(){
+ //安卓需要节流
+ if (this.data.info.platform =='android'){
+ clearTimeout(this.data.MOVE_THROTTLE);
+ this.data.MOVE_THROTTLE = setTimeout(() => {
+ this.data.MOVE_THROTTLE_FLAG = true;
+ }, 1000 / 40)
+ return this.data.MOVE_THROTTLE_FLAG;
+ }else{
+ this.data.MOVE_THROTTLE_FLAG = true;
+ }
+ },
+ _move(event) {
+ if (this.data._flag_img_endtouch || !this.data.MOVE_THROTTLE_FLAG) return;
+ this.data.MOVE_THROTTLE_FLAG = false;
+ this._move_throttle();
+ this._moveDuring();
+ if (event.touches.length == 1) {
+ //单指拖动
+ let left = (event.touches[0].clientX - this.data._touch_img_relative[0].x),
+ top = (event.touches[0].clientY - this.data._touch_img_relative[0].y);
+ //图像边缘检测,防止截取到空白
+ this.data._img_left = left;
+ this.data._img_top = top;
+ this._imgMarginDetectionPosition();
+ this.setData({
+ _img_left: this.data._img_left,
+ _img_top: this.data._img_top
+ });
+ } else {
+ //双指放大
+ let width = (Math.abs(event.touches[0].clientX - event.touches[1].clientX)),
+ height = (Math.abs(event.touches[0].clientY - event.touches[1].clientY)),
+ hypotenuse = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2)),
+ scale = this.data.scale * (hypotenuse / this.data._hypotenuse_length),
+ current_deg = 0;
+ scale = scale <= this.data.min_scale ? this.data.min_scale : scale;
+ scale = scale >= this.data.max_scale ? this.data.max_scale : scale;
+ //图像边缘检测,防止截取到空白
+ this.data.scale = scale;
+ this._imgMarginDetectionScale();
+ //双指旋转(如果没禁用旋转)
+ let _touch_img_relative = [{
+ x: (event.touches[0].clientX - this.data._img_left),
+ y: (event.touches[0].clientY - this.data._img_top)
+ }, {
+ x: (event.touches[1].clientX - this.data._img_left),
+ y: (event.touches[1].clientY - this.data._img_top)
+ }];
+ if (!this.data.disable_rotate){
+ let first_atan = 180 / Math.PI * Math.atan2(_touch_img_relative[0].y, _touch_img_relative[0].x);
+ let first_atan_old = 180 / Math.PI * Math.atan2(this.data._touch_img_relative[0].y, this.data._touch_img_relative[0].x);
+ let second_atan = 180 / Math.PI * Math.atan2(_touch_img_relative[1].y, _touch_img_relative[1].x);
+ let second_atan_old = 180 / Math.PI * Math.atan2(this.data._touch_img_relative[1].y, this.data._touch_img_relative[1].x);
+ //当前旋转的角度
+ let first_deg = first_atan - first_atan_old,
+ second_deg = second_atan - second_atan_old;
+ if (first_deg != 0) {
+ current_deg = first_deg;
+ } else if (second_deg != 0) {
+ current_deg = second_deg;
+ }
+ }
+ this.data._touch_img_relative = _touch_img_relative;
+ this.data._hypotenuse_length = Math.sqrt(Math.pow(width, 2) + Math.pow(height, 2));
+ //更新视图
+ this.setData({
+ angle: this.data.angle + current_deg,
+ scale: this.data.scale
+ });
+ }
+ !this.data._canvas_overflow && this._draw();
+ },
+ //结束操作
+ _end(event) {
+ this.data._flag_img_endtouch = true;
+ this._moveStop();
+ },
+ //点击中间剪裁框处理
+ _click(event) {
+ if (!this.data.imgSrc) {
+ //调起上传
+ this.upload();
+ return;
+ }
+ this._draw(()=>{
+ let x = event.detail ? event.detail.x : event.touches[0].clientX;
+ let y = event.detail ? event.detail.y : event.touches[0].clientY;
+ if ((x >= this.data.cut_left && x <= (this.data.cut_left + this.data.width)) && (y >= this.data.cut_top && y <= (this.data.cut_top + this.data.height))) {
+ //生成图片并回调
+ wx.canvasToTempFilePath({
+ width: this.data.width * this.data.export_scale,
+ height: Math.round(this.data.height * this.data.export_scale),
+ destWidth: this.data.width * this.data.export_scale,
+ destHeight: Math.round(this.data.height) * this.data.export_scale,
+ fileType: 'png',
+ quality: this.data.quality,
+ canvasId: this.data.el,
+ success: (res) => {
+ this.triggerEvent('tapcut', {
+ url: res.tempFilePath,
+ width: this.data.width * this.data.export_scale,
+ height: this.data.height * this.data.export_scale
+ });
+ }
+ }, this)
+ }
+ });
+ },
+ //渲染
+ _draw(callback) {
+ if (!this.data.imgSrc) return;
+ let draw = () => {
+ //图片实际大小
+ let img_width = this.data.img_width * this.data.scale * this.data.export_scale;
+ let img_height = this.data.img_height * this.data.scale * this.data.export_scale;
+ //canvas和图片的相对距离
+ var xpos = this.data._img_left - this.data.cut_left;
+ var ypos = this.data._img_top - this.data.cut_top;
+ //旋转画布
+ this.data.ctx.translate(xpos * this.data.export_scale, ypos * this.data.export_scale);
+ this.data.ctx.rotate(this.data.angle * Math.PI / 180);
+ this.data.ctx.drawImage(this.data.imgSrc, -img_width / 2, -img_height / 2, img_width, img_height);
+ this.data.ctx.draw(false, () => {
+ callback && callback();
+ });
+ }
+ if (this.data.ctx.width != this.data.width || this.data.ctx.height != this.data.height){
+ //优化拖动裁剪框,所以必须把宽高设置放在离用户触发渲染最近的地方
+ this.setData({
+ _canvas_height: this.data.height,
+ _canvas_width: this.data.width,
+ },()=>{
+ //延迟40毫秒防止点击过快出现拉伸或裁剪过多
+ setTimeout(() => {
+ draw();
+ }, 40);
+ });
+ }else{
+ draw();
+ }
+ },
+ //裁剪框处理
+ _cutTouchMove(e) {
+ if (this.data._flag_cut_touch && this.data.MOVE_THROTTLE_FLAG) {
+ if (this.data.disable_ratio && (this.data.disable_width || this.data.disable_height)) return;
+ //节流
+ this.data.MOVE_THROTTLE_FLAG = false;
+ this._move_throttle();
+ let width = this.data.width,
+ height = this.data.height,
+ cut_top = this.data.cut_top,
+ cut_left = this.data.cut_left,
+ size_correct = () => {
+ width = width <= this.data.max_width ? width >= this.data.min_width ? width : this.data.min_width : this.data.max_width;
+ height = height <= this.data.max_height ? height >= this.data.min_height ? height : this.data.min_height : this.data.max_height;
+ },
+ size_inspect = () => {
+ if ((width > this.data.max_width || width < this.data.min_width || height > this.data.max_height || height < this.data.min_height) && this.data.disable_ratio) {
+ size_correct();
+ return false;
+ } else {
+ size_correct();
+ return true;
+ }
+ };
+ height = this.data.CUT_START.height + ((this.data.CUT_START.corner > 1 && this.data.CUT_START.corner < 4 ? 1 : -1) * (this.data.CUT_START.y - e.touches[0].clientY));
+ switch (this.data.CUT_START.corner) {
+ case 1:
+ width = this.data.CUT_START.width + this.data.CUT_START.x - e.touches[0].clientX;
+ if (this.data.disable_ratio) {
+ height = width / (this.data.width / this.data.height)
+ }
+ if (!size_inspect()) return;
+ cut_left = this.data.CUT_START.cut_left - (width - this.data.CUT_START.width);
+ break
+ case 2:
+ width = this.data.CUT_START.width + this.data.CUT_START.x - e.touches[0].clientX;
+ if (this.data.disable_ratio) {
+ height = width / (this.data.width / this.data.height)
+ }
+ if (!size_inspect()) return;
+ cut_top = this.data.CUT_START.cut_top - (height - this.data.CUT_START.height)
+ cut_left = this.data.CUT_START.cut_left - (width - this.data.CUT_START.width)
+ break
+ case 3:
+ width = this.data.CUT_START.width - this.data.CUT_START.x + e.touches[0].clientX;
+ if (this.data.disable_ratio) {
+ height = width / (this.data.width / this.data.height)
+ }
+ if (!size_inspect()) return;
+ cut_top = this.data.CUT_START.cut_top - (height - this.data.CUT_START.height);
+ break
+ case 4:
+ width = this.data.CUT_START.width - this.data.CUT_START.x + e.touches[0].clientX;
+ if (this.data.disable_ratio) {
+ height = width / (this.data.width / this.data.height)
+ }
+ if (!size_inspect()) return;
+ break
+ }
+ if (!this.data.disable_width && !this.data.disable_height) {
+ this.setData({
+ width: width,
+ cut_left: cut_left,
+ height: height,
+ cut_top: cut_top,
+ })
+ } else if (!this.data.disable_width) {
+ this.setData({
+ width: width,
+ cut_left: cut_left
+ })
+ } else if (!this.data.disable_height) {
+ this.setData({
+ height: height,
+ cut_top: cut_top
+ })
+ }
+ this._imgMarginDetectionScale();
+ }
+ },
+ _cutTouchStart(e) {
+ let currentX = e.touches[0].clientX;
+ let currentY = e.touches[0].clientY;
+ let cutbox_top4 = this.data.cut_top + this.data.height - 30;
+ let cutbox_bottom4 = this.data.cut_top + this.data.height + 20;
+ let cutbox_left4 = this.data.cut_left + this.data.width - 30;
+ let cutbox_right4 = this.data.cut_left + this.data.width + 30;
+
+ let cutbox_top3 = this.data.cut_top - 30;
+ let cutbox_bottom3 = this.data.cut_top + 30;
+ let cutbox_left3 = this.data.cut_left + this.data.width - 30;
+ let cutbox_right3 = this.data.cut_left + this.data.width + 30;
+
+ let cutbox_top2 = this.data.cut_top - 30;
+ let cutbox_bottom2 = this.data.cut_top + 30;
+ let cutbox_left2 = this.data.cut_left - 30;
+ let cutbox_right2 = this.data.cut_left + 30;
+
+ let cutbox_top1 = this.data.cut_top + this.data.height - 30;
+ let cutbox_bottom1 = this.data.cut_top + this.data.height + 30;
+ let cutbox_left1 = this.data.cut_left - 30;
+ let cutbox_right1 = this.data.cut_left + 30;
+ if (currentX > cutbox_left4 && currentX < cutbox_right4 && currentY > cutbox_top4 && currentY < cutbox_bottom4) {
+ this._moveDuring();
+ this.data._flag_cut_touch = true;
+ this.data._flag_img_endtouch = true;
+ this.data.CUT_START = {
+ width: this.data.width,
+ height: this.data.height,
+ x: currentX,
+ y: currentY,
+ corner: 4
+ }
+ } else if (currentX > cutbox_left3 && currentX < cutbox_right3 && currentY > cutbox_top3 && currentY < cutbox_bottom3) {
+ this._moveDuring();
+ this.data._flag_cut_touch = true;
+ this.data._flag_img_endtouch = true;
+ this.data.CUT_START = {
+ width: this.data.width,
+ height: this.data.height,
+ x: currentX,
+ y: currentY,
+ cut_top: this.data.cut_top,
+ cut_left: this.data.cut_left,
+ corner: 3
+ }
+ } else if (currentX > cutbox_left2 && currentX < cutbox_right2 && currentY > cutbox_top2 && currentY < cutbox_bottom2) {
+ this._moveDuring();
+ this.data._flag_cut_touch = true;
+ this.data._flag_img_endtouch = true;
+ this.data.CUT_START = {
+ width: this.data.width,
+ height: this.data.height,
+ cut_top: this.data.cut_top,
+ cut_left: this.data.cut_left,
+ x: currentX,
+ y: currentY,
+ corner: 2
+ }
+ } else if (currentX > cutbox_left1 && currentX < cutbox_right1 && currentY > cutbox_top1 && currentY < cutbox_bottom1) {
+ this._moveDuring();
+ this.data._flag_cut_touch = true;
+ this.data._flag_img_endtouch = true;
+ this.data.CUT_START = {
+ width: this.data.width,
+ height: this.data.height,
+ cut_top: this.data.cut_top,
+ cut_left: this.data.cut_left,
+ x: currentX,
+ y: currentY,
+ corner: 1
+ }
+ }
+ },
+ _cutTouchEnd(e) {
+ this._moveStop();
+ this.data._flag_cut_touch = false;
+ },
+ //停止移动时需要做的操作
+ _moveStop() {
+ //清空之前的自动居中延迟函数并添加最新的
+ clearTimeout(this.data.TIME_CUT_CENTER);
+ this.data.TIME_CUT_CENTER = setTimeout(() => {
+ //动画启动
+ if (!this.data._cut_animation) {
+ this.setData({
+ _cut_animation: true
+ });
+ }
+ this.setCutCenter();
+ }, 1000)
+ //清空之前的背景变化延迟函数并添加最新的
+ clearTimeout(this.data.TIME_BG);
+ this.data.TIME_BG = setTimeout(() => {
+ if (this.data._flag_bright) {
+ this.setData({
+ _flag_bright: false
+ });
+ }
+ }, 2000)
+ },
+ //移动中
+ _moveDuring() {
+ //清空之前的自动居中延迟函数
+ clearTimeout(this.data.TIME_CUT_CENTER);
+ //清空之前的背景变化延迟函数
+ clearTimeout(this.data.TIME_BG);
+ //高亮背景
+ if (!this.data._flag_bright) {
+ this.setData({
+ _flag_bright: true
+ });
+ }
+ },
+ //监听器
+ _watcher() {
+ Object.keys(this.data).forEach(v => {
+ this._observe(this.data, v, this.data.watch[v]);
+ })
+ },
+ _observe(obj, key, watchFun) {
+ var val = obj[key];
+ Object.defineProperty(obj, key, {
+ configurable: true,
+ enumerable: true,
+ set:(value) => {
+ val = value;
+ watchFun && watchFun(val, this);
+ },
+ get() {
+ if (val && '_img_top|img_left||width|height|min_width|max_width|min_height|max_height|export_scale|cut_top|cut_left|canvas_top|canvas_left|img_width|img_height|scale|angle|min_scale|max_scale'.indexOf(key)!=-1){
+ let ret = parseFloat(parseFloat(val).toFixed(3));
+ if (typeof val == "string" && val.indexOf("%") != -1){
+ ret+='%';
+ }
+ return ret;
+ }
+ return val;
+ }
+ })
+ },
+ _preventTouchMove() {
+ }
+ }
+})
diff --git a/手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.json b/手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.json
new file mode 100644
index 0000000..32640e0
--- /dev/null
+++ b/手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.json
@@ -0,0 +1,3 @@
+{
+ "component": true
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.wxml b/手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.wxml
new file mode 100644
index 0000000..12079bb
--- /dev/null
+++ b/手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.wxml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.wxss b/手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.wxss
new file mode 100644
index 0000000..b5ef0c0
--- /dev/null
+++ b/手太欠/优迪尔-小程序/commpent/image-cropper-master/image-cropper.wxss
@@ -0,0 +1,123 @@
+.image-cropper{
+ background:rgba(14, 13, 13,.8);
+ position: fixed;
+ top:0;
+ left:0;
+ width:100vw;
+ height:100vh;
+ z-index: 1;
+}
+.main{
+ position: absolute;
+ width:100vw;
+ height:100vh;
+ overflow: hidden;
+}
+.content{
+ z-index: 9;
+ position: absolute;
+ width:100vw;
+ height:100vh;
+ display: flex;
+ flex-direction:column;
+ pointer-events:none;
+}
+.bg_black{
+ background: rgba(0, 0, 0, 0.8)!important;
+}
+.bg_gray{
+ background: rgba(0, 0, 0, 0.45);
+ transition-duration: .35s;
+}
+.content>.content_top{
+ pointer-events:none;
+}
+.content>.content_middle{
+ display: flex;
+ height: 200px;
+ width:100%;
+}
+.content_middle_middle{
+ width:200px;
+ box-sizing:border-box;
+ position: relative;
+ transition-duration: .3s;
+}
+.content_middle_right{
+ flex: auto;
+}
+.content>.content_bottom{
+ flex: auto;
+}
+.image-cropper .img{
+ z-index: 2;
+ top:0;
+ left:0;
+ position: absolute;
+ border:none;
+ width:100%;
+ backface-visibility: hidden;
+ transform-origin:center;
+}
+.image-cropper-canvas{
+ position: fixed;
+ background: white;
+ width:150px;
+ height:150px;
+ z-index: 10;
+ top:-200%;
+ pointer-events:none;
+}
+.border{
+ background: white;
+ pointer-events:auto;
+ position:absolute;
+}
+.border-top-left{
+ left:-2.5px;
+ top:-2.5px;
+ height:2.5px;
+ width:33rpx;
+}
+.border-top-right{
+ right:-2.5px;
+ top:-2.5px;
+ height:2.5px;
+ width:33rpx;
+}
+.border-right-top{
+ top:-1px;
+ width:2.5px;
+ height:30rpx;
+ right:-2.5px;
+}
+.border-right-bottom{
+ width:2.5px;
+ height:30rpx;
+ right:-2.5px;
+ bottom:-1px;
+}
+.border-bottom-left{
+ height:2.5px;
+ width:33rpx;
+ bottom:-2.5px;
+ left:-2.5px;
+}
+.border-bottom-right{
+ height:2.5px;
+ width:33rpx;
+ bottom:-2.5px;
+ right:-2.5px;
+}
+.border-left-top{
+ top:-1px;
+ width:2.5px;
+ height:30rpx;
+ left:-2.5px;
+}
+.border-left-bottom{
+ width:2.5px;
+ height:30rpx;
+ left:-2.5px;
+ bottom:-1px;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/custom-tab-bar/index.js b/手太欠/优迪尔-小程序/custom-tab-bar/index.js
new file mode 100644
index 0000000..85b2385
--- /dev/null
+++ b/手太欠/优迪尔-小程序/custom-tab-bar/index.js
@@ -0,0 +1,69 @@
+Component({
+ data: {
+ selected: 0,
+ color: "#d7d7d7",
+ roleId: '',
+ selectedColor: "#2170f1",
+ allList: {
+ list1: [{
+ "pagePath": "/pages/stuIndex/index",
+ "text": "首页",
+ "iconPath": "/static/tabBarIcon/stuTabBar_00.png",
+ "selectedIconPath": "/static/tabBarIcon/stuTabBar_00_active.png"
+ },{
+ "pagePath": "/pages/stuUser/index",
+ "text": "我的",
+ "iconPath": "/static/tabBarIcon/stuTabBar_01.png",
+ "selectedIconPath": "/static/tabBarIcon/stuTabBar_01_active.png"
+ }],
+
+ list2: [{
+ "pagePath": "/pages/teaIndex/index",
+ "text": "首页",
+ "iconPath": "/static/tabBarIcon/teaTabBar_00.png",
+ "selectedIconPath": "/static/tabBarIcon/teaTabBar_00_active.png"
+ },{
+ "pagePath": "/pages/teaClass/index",
+ "text": "班级",
+ "iconPath": "/static/tabBarIcon/teaTabBar_01.png",
+ "selectedIconPath": "/static/tabBarIcon/teaTabBar_01_active.png"
+ },{
+ "pagePath": "/pages/teaUser/index",
+ "text": "我的",
+ "iconPath": "/static/tabBarIcon/teaTabBar_02.png",
+ "selectedIconPath": "/static/tabBarIcon/teaTabBar_02_active.png"
+ }]
+ },
+ list: []
+ },
+ properties: {
+ atPagesUrl: {
+ type: String,
+ value: ""
+ }
+ },
+ pageLifetimes: {
+ show() {
+ wx.getStorage({
+ key: "status",
+ success: res=> {
+ let tabList = this.data.allList.list1
+ if(res.data === 2) tabList = this.data.allList.list2
+ this.setData({
+ list: tabList
+ })
+ }
+ })
+ }
+ },
+ methods: {
+ switchTab(e) {
+ const data = e.currentTarget.dataset
+ const url = data.path
+ wx.redirectTo({ url })
+ this.setData({
+ selected: data.index
+ })
+ }
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/custom-tab-bar/index.json b/手太欠/优迪尔-小程序/custom-tab-bar/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/手太欠/优迪尔-小程序/custom-tab-bar/index.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/custom-tab-bar/index.wxml b/手太欠/优迪尔-小程序/custom-tab-bar/index.wxml
new file mode 100644
index 0000000..ed559f0
--- /dev/null
+++ b/手太欠/优迪尔-小程序/custom-tab-bar/index.wxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ {{item.text}}
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/custom-tab-bar/index.wxss b/手太欠/优迪尔-小程序/custom-tab-bar/index.wxss
new file mode 100644
index 0000000..5cad118
--- /dev/null
+++ b/手太欠/优迪尔-小程序/custom-tab-bar/index.wxss
@@ -0,0 +1,41 @@
+.tab-bar {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ height: 58px;
+ background: white;
+ display: flex;
+ padding-bottom: env(safe-area-inset-bottom);
+ z-index: 10000;
+}
+
+.tab-bar-border {
+ box-shadow: 0.05rem 0.05rem 0.05rem 0 #f2f2f2;
+ border-top: solid .05rem #f2f2f2;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 1px;
+ transform: scaleY(0.5);
+}
+
+.tab-bar-item {
+ flex: 1;
+ text-align: center;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-direction: column;
+}
+
+.tab-bar-item .cover-image {
+ width: 50rpx;
+ height: 50rpx;
+}
+
+.tab-bar-item .cover-view {
+ margin-top: 8rpx;
+ font-size: 24rpx;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/login/index.js b/手太欠/优迪尔-小程序/pages/login/index.js
new file mode 100644
index 0000000..0f0c124
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/login/index.js
@@ -0,0 +1,170 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ loginShow: false, //手机号授权弹出层
+ showUser : false, //微信用户信息授权弹出层
+ loginCode: ''
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad() {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+ wx.login({
+ success: res => {
+ this.setData({
+ loginCode : res.code
+ })
+ }
+ })
+ },
+
+ /**
+ * 生命周期函数-- 页面加载完成
+ */
+ onReady() {
+ this.setData({
+ animation: true
+ })
+ },
+
+ /**
+ * 授权登录弹出层
+ */
+ loginTap() {
+ this.setData({
+ loginShow: !this.data.loginShow
+ })
+ },
+
+ /**
+ * 微信授权手机号码
+ */
+ userPhone(e){
+ if(e.detail.errMsg == "getPhoneNumber:ok"){
+ let enData = e.detail.encryptedData,
+ iv = e.detail.iv
+ // 检查用户登录Code是否过期
+ wx.checkSession({
+ success: ()=>{
+ this.userLogin(iv,enData)
+ },
+ fail: err=>{
+ // 登录过期重新获取code
+ wx.login({
+ success: res=>{
+ this.setData({
+ loginCode: res.code
+ })
+ // 登录
+ this.userLogin(iv,enData)
+ }
+ })
+ }
+ })
+ }else{
+ wx.showToast({
+ title: '拒绝了登录授权',
+ icon : 'none'
+ })
+ }
+ },
+
+ /**
+ * 用户登录
+ */
+ userLogin(iv,enData){
+ wx.$api.auth.login({
+ code : this.data.loginCode,
+ encryptedData : enData,
+ iv : iv
+ }).then(res=>{
+ // 存储登录信息
+ wx.setStorageSync('token', res.data.access_token)
+ // 更新全局状态
+ getApp().globalData.token = res.data.access_token
+ getApp().globalData.isUser = true
+
+ let userData = res.data
+
+ // 存储身份类型 type=1为学生 type=2为教师
+ wx.setStorage({
+ key: "status",
+ data: userData.type,
+ success: res=> {
+ // 关闭教育介绍-授权页
+ this.setData({
+ loginShow: false
+ })
+ // has_cover为假的时,弹出用户信息授权
+ if(!userData.has_cover) {
+ this.setData({
+ showUser: true
+ })
+ return
+ }
+ // 根据不同身份跳转相关页面
+ if(userData.type == 1) {
+ wx.redirectTo({
+ url: '/pages/stuIndex/index'
+ })
+ } else {
+ wx.redirectTo({
+ url: '/pages/teaIndex/index'
+ })
+ }
+ }
+ })
+ }).catch(err=>{
+ this.onShow()
+ })
+ },
+
+ /**
+ * 微信用户信息授权
+ */
+ getuserInfo(){
+ wx.getUserProfile({
+ desc : "获取你的昵称、头像、地区及性别",
+ success : res => {
+ if(res.errMsg == "getUserProfile:ok"){
+ wx.$api.stuUsers.cover({
+ value: res.userInfo.avatarUrl
+ }).then(res=>{
+ // 用户信息存入缓存
+ const roleId = wx.getStorageSync('status')
+ if(roleId == 1) {
+ wx.redirectTo({
+ url: '/pages/stuIndex/index'
+ })
+ } else {
+ wx.redirectTo({
+ url: '/pages/teaIndex/index'
+ })
+ }
+ })
+ }
+ },
+ fail: res => {
+ //拒绝授权
+ that.showErrorModal('您拒绝了请求');
+ return;
+ }
+ })
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/login/index.json b/手太欠/优迪尔-小程序/pages/login/index.json
new file mode 100644
index 0000000..83d1a3c
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/login/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 登录"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/login/index.wxml b/手太欠/优迪尔-小程序/pages/login/index.wxml
new file mode 100644
index 0000000..97d64c3
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/login/index.wxml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 优迪尔在线教育 · 介绍
+
+
+ 欢迎来到优迪尔双师教学机器人教学平台,在人工智能高速发展的创新的时代,机器人教育也在基础教育 当中如火如荼地开展着。
+ 优迪尔专为3-12岁儿童开发机器人编程课程,以课程为载体,让学生了解与学 习人工智能的兴趣特点,培养学生的动手动脑能力、逻辑思维能力、解决问题能力、创意创造能力,同 时对未来学科学习奠定坚实的基础储备力量。
+ 为了进一步提升教学平台的服务力度,改善服务体验,优迪尔教学平台简化了登录、授课流程,使学习更加便捷。
+
+
+
+
+ 暂不登录
+
+
+
+
+
+
+
+
+
+ 优迪尔申请获取以下权限
+ {{needMobile ? '获得你的微信手机号' : '获得你的公开信息(昵称,头像)'}}
+
+ 取消
+
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/login/index.wxss b/手太欠/优迪尔-小程序/pages/login/index.wxss
new file mode 100644
index 0000000..815c0fb
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/login/index.wxss
@@ -0,0 +1,247 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+ .login-back{
+ width: 100vw;
+ height: 100vh;
+ vertical-align: top;
+}
+
+.login-star{
+ position: fixed;
+ z-index: 1;
+ top: 0;
+ left: 0;
+ width: 100%;
+}
+
+.login-star.animation{
+ animation: star 5s infinite;
+}
+
+@keyframes star{
+ 0%{
+ opacity: 0;
+ }
+ 50%{
+ opacity: 1;
+ }
+ to{
+ opacity: 0;
+ }
+}
+
+/* 文字层 */
+.login-center{
+ position: absolute;
+ top: 8vh;
+ left: 0;
+ z-index: 3;
+ width: 100%;
+ text-align: center;
+}
+
+.login-center-title{
+ width: 73vw;
+ opacity: 1;
+ margin: 0 auto;
+}
+
+.login-center-title.animation{
+ animation: title 1.5s;
+}
+
+.login-center-text{
+ width: 45vw;
+ margin-top: 10vh;
+}
+
+@keyframes title {
+ 10%{
+ opacity: 0;
+ }
+ to{
+ opacity: 1;
+ }
+}
+
+/* footer */
+.login-footer{
+ position: fixed;
+ bottom: 0;
+ padding: 50rpx 50rpx 80rpx;
+ width: 100%;
+ box-sizing: border-box;
+ text-align: center;
+ z-index: 99;
+}
+
+.login-footer-copy{
+ color: white;
+}
+
+.login-footer-copy{
+ line-height: 40rpx;
+ font-size: 28rpx;
+}
+
+.login-footer-btns{
+ padding-bottom: 50rpx;
+}
+
+.login-footer-btn,
+.login-footer-btn[size="default"]{
+ width: 100%;
+ height: 90rpx;
+ line-height: 90rpx;
+ padding: 0;
+ border-radius: 6rpx;
+ font-size: 34rpx;
+ color: #050d7c;
+ background: #eec43a;
+ font-weight: bold;
+}
+
+
+/* 介绍弹出 */
+.introduceBack {
+ position: fixed;
+ width: 100vw;
+ z-index: 99;
+ left: 0;
+ top: 0;
+ background: rgba(0, 0, 0, .5);
+ height: 100vh;
+ display: none;
+}
+
+.introduceBack.active {
+ display: block;
+}
+
+.introducCont {
+ position: fixed;
+ left: 80rpx;
+ right: 80rpx;
+ top: -100%;
+ background-color: #fff;
+ border-radius: 10rpx;
+ z-index: 100;
+ padding: 40rpx 40rpx 60rpx;
+ box-sizing: border-box;
+ transition: .2s;
+ height: 75vh;
+}
+
+.introducCont.active {
+ top: 12vh;
+}
+
+.introducCont-title {
+ text-align: center;
+ width: 100%;
+ margin-bottom: 10rpx;
+ font-size: 36rpx;
+ font-weight: 600;
+ color: #173e96;
+}
+
+.introducCont-text {
+ line-height: 50rpx;
+ font-size: 30rpx;
+ height: calc(100% - 260rpx);
+ overflow-y: scroll;
+}
+
+.introducCont-text text {
+ margin-top: 20rpx;
+ display: block;
+}
+
+.introducCont-login .login-footer-btn {
+ background-color: #173e96;
+ color: #fff;
+ margin: 40rpx 0;
+ border-radius: 10rpx;
+ font-weight: normal;
+ font-size: 30rpx;
+}
+
+.introducCont-no {
+ text-align: center;
+ color: #999;
+ font-size: 28rpx;
+}
+
+/* 微信用户信息弹出 */
+.empowerBack {
+ position: fixed;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ z-index: 100;
+ background: rgba(0, 0, 0, .6);
+}
+
+.empowerCont {
+ position: fixed;
+ left: 100rpx;
+ right: 100rpx;
+ background-color: #fff;
+ z-index: 101;
+ top: 25%;
+ border-radius: 10rpx;
+ padding: 40rpx;
+ box-sizing: border-box;
+}
+
+.headView {
+ color: #4e4e4e;
+}
+
+.headImageView {
+ width: 140rpx;
+ height: 140rpx;
+ border-radius: 50%;
+ overflow: hidden;
+ margin: 0 auto 40rpx;
+}
+
+.headImage {
+ width: 100%;
+ height: 100%;
+}
+
+.contentText {
+ margin: 20rpx 0 40rpx;
+ line-height: 60rpx;
+}
+
+.empowerBtn {
+ display: flex;
+ float: right;
+ height: 40rpx;
+}
+
+.authBtn {
+ width: auto !important;
+ padding: 0 !important;
+ margin: 0 !important;
+ display: inline-block;
+ height: auto;
+ line-height: 40rpx;
+ font-size: 32rpx;
+ font-weight: normal;
+ color: #fd4c44;
+ background: transparent;
+}
+
+.empowerBtn-cancel {
+ font-size: 32rpx;
+ display: inline-block;
+ line-height: 40rpx;
+ margin: 0 40rpx;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/publicChapter/index.js b/手太欠/优迪尔-小程序/pages/publicChapter/index.js
new file mode 100644
index 0000000..4bfa279
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/publicChapter/index.js
@@ -0,0 +1,119 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+*/
+
+/*
+ * 此页面教师端首页+教师端班级+学生端共用,由type名字判断
+*/
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ dataType : '', //tea为教师端 stu为学生端 stuSee为学生观看--从课后复习进入
+ chapterId : '', //章节id
+ chapterText : '', //章节介绍
+ chapterData : [], //章节列表
+ classId : '', //来源--(班级-复习-阶段列表-章节)
+ page : {}, //下一页
+ lodingStats : false, //加载状态
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ dataType : options.type,
+ chapterId : options.id,
+ classId : options.classid
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+ // 获取课程列表
+ this.chapterInfo();
+
+ let pages = getCurrentPages(); //当前页面栈
+ console.log(pages)
+ },
+
+ /**
+ * 课程列表
+ */
+ chapterInfo(page) {
+ let dataUrl = '' //定义接口来源名称
+
+ // stuSee为学生观看-从课后复习进入
+ if(this.data.dataType == 'stuSee') dataUrl = wx.$api.teaIndex.teachSection(this.data.classId, this.data.chapterId, page)
+
+ // tea为教师端-首页列表进入
+ if(this.data.dataType == 'tea') dataUrl = wx.$api.teaIndex.section(this.data.chapterId, page)
+
+ // stu为学生端-首页列表进入
+ if(this.data.dataType == 'stu') dataUrl = wx.$api.stuIndex.stuSections(this.data.chapterId, page)
+
+ dataUrl.then(res=>{
+ let chapterArr = this.data.chapterData,
+ newData = []
+ if(page == 1 || page == undefined) chapterArr = []
+ newData = chapterArr.concat(res.data.sections.data)
+
+ this.setData({
+ chapterText : res.data,
+ chapterData : newData,
+ page : res.data.sections.page,
+ lodingStats : false
+ })
+ wx.stopPullDownRefresh()
+ })
+ },
+
+ /**
+ * 章节详情跳转
+ */
+ videoUrl(e) {
+ let id = e.currentTarget.dataset.id || e.currentTarget.dataset.stuid,
+ lock = e.currentTarget.dataset.lock,
+ type = this.data.dataType
+ if(lock == 1) {
+ wx.showToast({
+ title : '请先解锁',
+ icon : 'none',
+ duration: 2000
+ })
+ return
+ }
+
+ // 区分stuSee和(tea,stu)数据的层级关系
+ if(this.data.dataType == 'stuSee') {
+ wx.navigateTo({
+ url: '/pages/publicReview/index?id=' + id + '&type=' + type + '&classid=' + this.data.classId
+ })
+ return
+ }
+ wx.navigateTo({
+ url: '/pages/publicReview/index?id=' + id + '&type=' + type
+ })
+ },
+
+ /**
+ * 上拉加载
+ */
+ onReachBottom(){
+ this.setData({
+ lodingStats: true
+ })
+ let pageNumber = this.data.page.current
+ if(this.data.page.has_more){
+ pageNumber++
+ this.chapterInfo(pageNumber)
+ }
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/publicChapter/index.json b/手太欠/优迪尔-小程序/pages/publicChapter/index.json
new file mode 100644
index 0000000..5a2d359
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/publicChapter/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 章节列表"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/publicChapter/index.wxml b/手太欠/优迪尔-小程序/pages/publicChapter/index.wxml
new file mode 100644
index 0000000..76c8af2
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/publicChapter/index.wxml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+ {{chapterText.title}}
+
+ 共{{chapterText.sectionCount}}节
+
+
+
+
+
+
+
+
+
+
+
+ 暂无数据
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/publicChapter/index.wxss b/手太欠/优迪尔-小程序/pages/publicChapter/index.wxss
new file mode 100644
index 0000000..ce58259
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/publicChapter/index.wxss
@@ -0,0 +1,133 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+.chapterTop {
+ position: relative;
+ width: 100%;
+ height: 250rpx;
+ overflow: hidden;
+}
+
+.chapterTop::after {
+ position: absolute;
+ content: '';
+ left: 0;
+ top: 0;
+ background-color: rgba(0, 0, 0, .6);
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+}
+
+.chapterTop-back {
+ position: absolute;
+ width: 100%;
+ left: 0;
+ top: 0;
+ height: 100%;
+ filter: blur(15rpx);
+ -webkit-filter: blur(15rpx);
+ z-index: 0;
+}
+
+.chapterTop-cont {
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: 2;
+ padding: 40rpx;
+ width: 100%;
+ box-sizing: border-box;
+ display: flex;
+}
+
+.chapterTop-img {
+ border: 4rpx solid #fff;
+ width: 160rpx;
+ height: 160rpx;
+}
+
+.chapterTop-img image {
+ width: 100%;
+ height: 100%;
+}
+
+.chapterTop-text {
+ color: #fff;
+ width: calc(100% - 220rpx);
+ margin-left: 40rpx;
+}
+
+.chapterTop-name {
+ font-size: 34rpx;
+ font-weight: 600;
+ margin-bottom: 50rpx;
+}
+
+.chapterTop-more {
+ display: flex;
+ font-size: 30rpx;
+ line-height: 36rpx;
+}
+
+.chapterTop-more image {
+ width: 36rpx;
+ height: 36rpx;
+}
+
+.chapterTop-more text {
+ flex: 1;
+}
+
+/* 章节列表 */
+.chapterTitle {
+ padding: 30rpx 20rpx;
+ box-sizing: border-box;
+ font-weight: 600;
+ background-color: #fff;
+}
+
+.chapterList {
+ padding: 30rpx;
+ position: relative;
+ box-sizing: border-box;
+ height: 150rpx;
+ width: 100%;
+ background-color: #fff;
+}
+
+.chapterList-icon {
+ width: 46rpx;
+ height: 46rpx;
+ margin-top: 20rpx;
+}
+
+.chapterList-cont {
+ position: absolute;
+ width: 100%;
+ left: 0;
+ top: 0;
+ padding: 30rpx 90rpx 30rpx 110rpx;
+ box-sizing: border-box;
+}
+
+.chapterList-name {
+ color: #5e6ffb;
+}
+
+.chapterList-tips {
+ color: #999999;
+ margin: 10rpx 0;
+ font-size: 28rpx;
+}
+
+.chapterList-more {
+ position: absolute;
+ right: 30rpx;
+ top: 60rpx;
+ width: 38rpx;
+ height: 38rpx;
+ opacity: .4;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/publicCourse/index.js b/手太欠/优迪尔-小程序/pages/publicCourse/index.js
new file mode 100644
index 0000000..e8a5740
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/publicCourse/index.js
@@ -0,0 +1,120 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+/*
+ * 此页面教师端首页+教师端班级+学生端共用,由type名字判断
+*/
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ dataType : '', //tea为教师端 stu为学生端 stuSee为学生观看--从课后复习进入
+ levelId : '', //学生端-课程列表id
+ courseId : '', //教师端-课程列表id
+ courseData : [], //课程列表
+ page : {}, //下一页
+ lodingStats : false, //加载状态
+ stuSee : {
+ classId: '', //班级id--(从教师端-班级-课后复习进入)
+ learnId: '' //阶段列表id--(从教师端-班级-课后复习进入)
+ }
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ dataType : options.type, //进入来源的类型
+ levelId : options.levelid, //stu为学生师端-首页进入
+ courseId : options.courseid, //tea为教师端-首页进入
+ ['stuSee.classId'] : options.classid, //班级id
+ ['stuSee.learnId'] : options.learnid, //阶段列表id
+ })
+
+ // 获取课程列表
+ this.listInfo();
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {},
+
+
+ /**
+ * 课程列表
+ */
+ listInfo(page) {
+ let dataUrl = '' //定义接口来源名称
+
+ // stuSee为学生观看-从课后复习进入
+ if(this.data.dataType == 'stuSee') dataUrl = wx.$api.teaIndex.teachLevel(this.data.stuSee.classId, this.data.stuSee.learnId, page)
+
+ // tea为教师端-首页列表进入
+ if(this.data.dataType == 'tea') dataUrl = wx.$api.teaIndex.courses(this.data.courseId, page)
+
+ // stu为学生端-首页列表进入
+ if(this.data.dataType == 'stu') dataUrl = wx.$api.stuIndex.stuLevel(this.data.levelId, page)
+
+ dataUrl.then(res=>{
+ let courseArr = this.data.courseData,
+ newData = []
+ if(page == 1 || page == undefined) courseArr = []
+ // 区分stuSee和(tea,stu)数据的层级关系
+ newData = courseArr.concat(res.data.data)
+ page = res.data.page
+ if(this.data.dataType == 'stuSee') {
+ newData = courseArr.concat(res.data.courses.data)
+ page = res.data.courses.page
+ }
+ this.setData({
+ classId : res.data.class_id,
+ courseData : newData,
+ page : page,
+ lodingStats : false
+ })
+ wx.stopPullDownRefresh()
+ })
+ },
+
+ /**
+ * 跳转课程章节列表
+ */
+ publicUrl(e) {
+ //stuid为学生端 //id为教师端
+ let id = e.currentTarget.dataset.id || e.currentTarget.dataset.stuid,
+ type = this.data.dataType
+
+ // 区分stuSee和(tea,stu)数据的层级关系
+ if(this.data.dataType == 'stuSee') {
+ wx.navigateTo({
+ url: '/pages/publicChapter/index?id=' + id + '&type=' + type + '&classid=' + this.data.stuSee.classId
+ })
+ return
+ }
+ wx.navigateTo({
+ url: '/pages/publicChapter/index?id=' + id + '&type=' + type
+ })
+
+ },
+
+ /**
+ * 上拉加载
+ */
+ onReachBottom(){
+ this.setData({
+ lodingStats: true
+ })
+ let pageNumber = this.data.page.current
+ if(this.data.page.has_more){
+ pageNumber++
+ this.listInfo(pageNumber)
+ }
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/publicCourse/index.json b/手太欠/优迪尔-小程序/pages/publicCourse/index.json
new file mode 100644
index 0000000..8a70319
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/publicCourse/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 课程列表"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/publicCourse/index.wxml b/手太欠/优迪尔-小程序/pages/publicCourse/index.wxml
new file mode 100644
index 0000000..44797cc
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/publicCourse/index.wxml
@@ -0,0 +1,28 @@
+
+
+
+
+ 暂无数据
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/publicCourse/index.wxss b/手太欠/优迪尔-小程序/pages/publicCourse/index.wxss
new file mode 100644
index 0000000..0646090
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/publicCourse/index.wxss
@@ -0,0 +1,63 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+/* 列表 */
+.stuFoot {
+ background-color: white;
+}
+
+.stuList {
+ position: relative;
+ width: 100%;
+ padding: 30rpx;
+ box-sizing: border-box;
+}
+
+.stuList .stuList-icon {
+ background-color: #f13a26;
+ width: 54rpx;
+ height: 54rpx;
+ border-radius: 8rpx;
+ text-align: center;
+}
+
+.stuList .stuList-icon image {
+ width: 30rpx;
+ height: 30rpx;
+ margin-top: 12rpx;
+}
+
+.stuList .stuList-cont {
+ position: absolute;
+ padding: 30rpx 30rpx 30rpx 110rpx;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ line-height: 54rpx;
+ box-sizing: border-box;
+ display: flex;
+}
+
+.stuList .stuList-name {
+ flex: 1;
+ margin-right: 40rpx;
+}
+
+.stuList .stuList-more {
+ display: flex;
+ color: #a5a5a5;
+ font-size: 28rpx;
+}
+
+.stuList .stuList-more image {
+ width: 32rpx;
+ height: 32rpx;
+ margin: 12rpx 0 0 10rpx;
+}
+
+.uni-border-down:last-child::after {
+ display: none;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/publicDetails/index.js b/手太欠/优迪尔-小程序/pages/publicDetails/index.js
new file mode 100644
index 0000000..20547bb
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/publicDetails/index.js
@@ -0,0 +1,45 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ dataType : '', //tea为教师端 stu为学生端
+ coursesId : '', //课程详情id
+ chapterText : '', //课程数据
+ content : '', //课程详情
+ target : '', //课程详情
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ dataType : options.type,
+ coursesId : options.id
+ })
+
+ // 获取课程详情
+ this.detailInfo();
+ },
+
+ /**
+ * 课程详情
+ */
+ detailInfo(page) {
+ wx.$api.teaIndex.coursedet(this.data.coursesId).then(res=>{
+ this.setData({
+ chapterText : res.data,
+ content : res.data.content.replace(/\
+
+
+
+
+ {{chapterText.title}}
+ 日期:{{chapterText.created_at}}
+
+
+
+
+
+
+ 课程目标
+
+
+
+
+
+
+ 课程详情
+
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/publicDetails/index.wxss b/手太欠/优迪尔-小程序/pages/publicDetails/index.wxss
new file mode 100644
index 0000000..4aca27e
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/publicDetails/index.wxss
@@ -0,0 +1,106 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+ .detailsTop {
+ position: relative;
+ width: 100%;
+ height: 320rpx;
+ overflow: hidden;
+}
+
+.detailsTop::after {
+ position: absolute;
+ content: '';
+ left: 0;
+ top: 0;
+ background-color: rgba(0, 0, 0, .6);
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+}
+
+.detailsTop-back {
+ position: absolute;
+ width: 100%;
+ left: 0;
+ top: 0;
+ height: 100%;
+ z-index: 0;
+}
+
+.detailsTop-cont {
+ position: absolute;
+ left: 0;
+ bottom: 30rpx;
+ z-index: 2;
+ width: 100%;
+ display: flex;
+}
+
+.detailsTop-img {
+ border: 4rpx solid #fff;
+ width: 160rpx;
+ height: 160rpx;
+}
+
+.detailsTop-img image {
+ width: 100%;
+ height: 100%;
+}
+
+.detailsTop-text {
+ color: #fff;
+ width: calc(100% - 220rpx);
+ margin-left: 40rpx;
+}
+
+.detailsTop-name {
+ font-size: 38rpx;
+ font-weight: 600;
+ margin-bottom: 20rpx;
+}
+
+/* 详情 */
+.detailsList {
+ padding: 30rpx;
+ box-sizing: border-box;
+ width: 100%;
+ background-color: #fff;
+}
+
+.detailsList-title {
+ width: 100%;
+ text-align: center;
+ font-size: 34rpx;
+ color: #5572fe;
+ margin-bottom: 30rpx;
+ position: relative;
+}
+
+.detailsList-title::after,
+.detailsList-title::before{
+ position: absolute;
+ content: '';
+ width: 100rpx;
+ height: 6rpx;
+ top: calc(50% - 3rpx);
+}
+
+.detailsList-title::after {
+ background: linear-gradient(to left, #5572fe, #fafafa);
+ left: calc(50% - 200rpx);
+}
+
+.detailsList-title::before {
+ background: linear-gradient(to right, #5572fe, #fafafa);
+ right: calc(50% - 200rpx);
+}
+
+
+.detailsList-text {
+ color: #999;
+ line-height: 60rpx;
+ font-size: 30rpx;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/publicReview/index.js b/手太欠/优迪尔-小程序/pages/publicReview/index.js
new file mode 100644
index 0000000..2b439a9
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/publicReview/index.js
@@ -0,0 +1,130 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ dataType : '', //tea为教师端 stu为学生端 stuSee为学生观看--从课后复习进入
+ isShow : false, //视频展示
+ videoCoverImg :'http://www.uideajg.cn/assets/index/img/video.jpg', // 视频封面图
+ detailId : '', //复习课id
+ detailData : '', //复习课数据
+ classId : '', //班级id--(从教师端-班级-课后复习进入)
+ content : '', //课程搭建图
+ isStop : false, //是否为继续播放状态
+ isLock : false, //是否解锁
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ dataType: options.type,
+ detailId: options.id,
+ classId : options.classid
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+ // 获取复习课详情
+ this.details();
+ },
+
+ /**
+ * 复习课详情
+ */
+ details() {
+ let dataUrl = '' //定义接口来源名称
+
+ // stuSee为学生观看-从课后复习进入
+ if(this.data.dataType == 'stuSee') dataUrl = wx.$api.teaIndex.teachSecDet(this.data.classId,this.data.detailId)
+
+ // tea为教师端-首页列表进入
+ if(this.data.dataType == 'tea') dataUrl = wx.$api.teaIndex.detail(this.data.detailId)
+
+ // tea为教师端-首页列表进入
+ if(this.data.dataType == 'stu') dataUrl = wx.$api.stuIndex.stuDet(this.data.detailId)
+
+
+ dataUrl.then(res=>{
+ let resData = ''
+ if(this.data.dataType == 'stuSee'){
+ resData = res.data.message
+ } else {
+ resData = res.data
+ }
+ this.setData({
+ isLock : res.data.is_lock || '',
+ detailData : resData,
+ content : resData.content.replace(/\
{
+ if(palyTimg == val && !this.data.isStop) {
+ videoContext.pause()
+ this.setData({
+ isStop: true
+ })
+ return
+ }
+ })
+ },
+
+ /**
+ * 再次按播放键触发
+ */
+ bindplay() {
+ let stopTime = setInterval( () => {
+ this.setData({
+ isStop: false
+ })
+ clearInterval(stopTime)
+ }, 1000)
+ },
+
+ /**
+ * 解锁章节
+ */
+ lockBind(e){
+ let sectionId = e.currentTarget.dataset.id
+ wx.$api.teaIndex.teachLock(this.data.classId,sectionId).then(res=>{
+ wx.showToast({
+ title : '解锁成功',
+ icon : 'success',
+ duration: 2000
+ })
+ this.setData({
+ isLock: true
+ })
+ })
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/publicReview/index.json b/手太欠/优迪尔-小程序/pages/publicReview/index.json
new file mode 100644
index 0000000..a4fb63a
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/publicReview/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 复习课"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/publicReview/index.wxml b/手太欠/优迪尔-小程序/pages/publicReview/index.wxml
new file mode 100644
index 0000000..e328ab8
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/publicReview/index.wxml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 复习解锁
+
+
+
+ 搭建图
+
+
+
+ 课程教案
+
+
+
+ 课程目录
+
+
+
+
+
+ {{dataType == 'tea' ? detailData.course_title : detailData.subtitle}}
+
+ 第{{detailData.order}}节 {{detailData.title}}
+
+
+
+
+
+
+
+ 课程搭建图
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/手太欠/优迪尔-小程序/pages/publicReview/index.wxss b/手太欠/优迪尔-小程序/pages/publicReview/index.wxss
new file mode 100644
index 0000000..1447c16
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/publicReview/index.wxss
@@ -0,0 +1,144 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+.classCont {
+ border-bottom: 110rpx solid transparent;
+}
+
+/* 視頻 */
+.reviewVideo {
+ display: block;
+}
+
+.video_bg_black {
+ position: absolute;
+ left: 0;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ background: rgba(0, 0, 0, .4);
+}
+
+.wrapper{
+ width: 100%;
+ padding-top: 60%;
+ position: relative;
+ background: #eee;
+}
+
+.videoPlay{
+ position: absolute;
+ width: 108rpx;
+ height: 108rpx;
+ top: calc(50% - 54rpx);
+ left: calc(50% - 54rpx);
+ z-index: 99;
+}
+
+.video-video,
+.video-cover{
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+/* 视频内容 */
+.reviewCont {
+ background-color: #fff;
+ padding: 30rpx;
+ box-sizing: border-box;
+ width: 100%;
+}
+
+.reviewLabel {
+ border: 4rpx solid #daca73;
+ border-radius: 20rpx;
+ padding: 30rpx;
+ width: 100%;
+ box-sizing: border-box;
+ font-weight: 600;
+}
+
+.reviewLabel-title {
+ font-size: 36rpx;
+ text-align: center;
+ margin-bottom: 20rpx;
+}
+
+.reviewLabel-chapter {
+ color: #999;
+}
+
+.reviewLabel-tips {
+ font-size: 46rpx;
+ text-align: center;
+ color: rgb(247, 150, 70);
+ margin: 50rpx 0 30rpx;
+}
+
+.reviewLabel-title image {
+ width: 70rpx;
+ height: 38rpx;
+ vertical-align: -8rpx
+}
+
+.reviewLabel-title text {
+ padding: 0 60rpx;
+}
+
+/* 只有教师端显示 */
+.reviewSort {
+ display: flex;
+ padding: 30rpx 0;
+ background-color: #fff;
+ margin-bottom: 30rpx;
+}
+
+.reviewSort-label {
+ flex: 4;
+ text-align: center;
+ font-size: 28rpx;
+}
+
+.reviewSort-img {
+ width: 94rpx;
+ height: 94rpx;
+ margin-bottom: 10rpx;
+}
+
+
+
+/* footer */
+
+.footer {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ padding-left: 30rpx;
+ padding-right: 30rpx;
+ background: white;
+ z-index: 9;
+ height: 110rpx;
+}
+
+.footer text {
+ display: block;
+ width: 100%;
+ line-height: 80rpx;
+ height: 80rpx;
+ margin: 15rpx 0;
+ text-align: center;
+ background: #5572fe;
+ font-size: 30rpx;
+ color: white;
+ border-radius: 10rpx
+}
+
+.footer.active text {
+ background: #d2d2d2;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/register/index.js b/手太欠/优迪尔-小程序/pages/register/index.js
new file mode 100644
index 0000000..f3b1e8b
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/register/index.js
@@ -0,0 +1,270 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ codename : '获取验证码',
+ showUser : false, //微信用户信息授权弹出层
+ class_id : '', //班级ID
+ mobileNo : '', //手机号
+ code : '', //验证码
+ nickname : '', //用户姓名
+ school : '', //所在学校
+
+ //省份选择
+ areas : [],
+ areaSn : '',
+ areaIndex : 0,
+
+ //市级选择
+ cityList : [],
+ cityId : 0,
+ cityIndex : 0,
+
+ //区域选择
+ regiList : [],
+ regiId : 0,
+ regiIndex : 0,
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.getProvince()
+ },
+
+ /**
+ * 获取省信息
+ */
+ getProvince() {
+ wx.$api.address.province('').then(res=>{
+ let areaArr = res.data,
+ areaIndex = this.data.areaIndex
+ this.citylist(areaArr[areaIndex].code)
+ this.setData({
+ areaSn : areaArr[areaIndex].code,
+ areas : areaArr
+ })
+ })
+
+ },
+
+ /**
+ * 所在省份
+ */
+ areasChange(e) {
+ let area = this.data.areas,
+ index = e.detail.value,
+ atcode = area[index].code
+ if (index != this.data.areaIndex) {
+ this.setData({
+ areaIndex : index,
+ areaSn : atcode
+ })
+
+ // 获取市级列表
+ this.citylist(atcode)
+ }
+ },
+
+ /**
+ * 市级列表
+ */
+ citylist(code) {
+ wx.$api.address.province(code).then(res=>{
+ let cityArr = res.data
+ this.regilist(cityArr[0].code)
+ this.setData({
+ cityId : cityArr[0].code,
+ cityList : cityArr,
+ cityIndex : 0
+ })
+ })
+ },
+
+ /**
+ * 市级下拉筛选
+ */
+ city(e) {
+ let city = this.data.cityList,
+ index = e.detail.value,
+ citycode = city[index].code
+ if (index != this.data.areaIndex) {
+ this.setData({
+ cityIndex: index,
+ cityId : citycode
+ })
+
+ // 获取市级列表
+ this.regilist(citycode)
+ }
+ },
+
+
+ /**
+ * 区列表
+ */
+ regilist(areaCode) {
+ wx.$api.address.province(areaCode).then(res=>{
+ this.setData({
+ regiList : res.data,
+ regiId : res.data[0].code,
+ regiIndex : 0
+ })
+ })
+ },
+
+ /**
+ * 区下拉筛选
+ */
+ regi(e) {
+ let newIndex = e.detail.value
+ this.setData({
+ regiIndex : newIndex,
+ regiId : this.data.regiList[newIndex].code
+ })
+ },
+
+ /**
+ * mobileNo
+ */
+ getNameValue(e) {
+ this.setData({
+ mobileNo: e.detail.value
+ })
+ },
+
+ /**
+ * 获取code
+ */
+ getCode(){
+ let mobileNo = this.data.mobileNo
+ wx.$api.auth.sms(mobileNo).then(res=>{
+ wx.showToast({
+ title : '发送成功',
+ icon : 'success',
+ duration: 2000
+ })
+ this.setData({
+ iscode: res.data.data
+ })
+ var num = 61;
+ var timer = setInterval(function () {
+ num--;
+ if (num <= 0) {
+ clearInterval(timer);
+ _this.setData({
+ codename : '重新发送',
+ disabled : false
+ })
+
+ } else {
+ _this.setData({
+ codename : num + "s后重新获取",
+ disabled : true
+ })
+ }
+ }, 1000)
+ })
+ },
+
+ /**
+ * 获取后输入code
+ */
+ getCodeValue (e) {
+ this.setData({
+ code: e.detail.value
+ })
+ },
+
+ /**
+ * register
+ */
+ registers(e){
+ let class_id = '714',
+ mobileNo = e.detail.value.mobileNo,
+ code = this.data.code,
+ nickname = e.detail.value.nickname,
+ province_id = this.data.areaSn,
+ city_id = this.data.cityId,
+ district_id = this.data.regiId,
+ school = e.detail.value.school
+ wx.$api.auth.register(class_id, mobileNo, code, nickname, province_id, city_id, district_id, school).then(res=>{
+ // 存储登录信息
+ wx.setStorageSync('token', res.data.access_token)
+ // 更新全局状态
+ getApp().globalData.token = res.data.access_token
+ getApp().globalData.isUser = true
+ let userData = res.data
+ // 存储身份类型 type=1为学生 type=2为教师
+ wx.setStorage({
+ key: "status",
+ data: userData.type,
+ success: ()=> {
+ // 关闭教育介绍-授权页
+ this.setData({
+ loginShow: false
+ })
+ // has_cover为假的时,弹出用户信息授权
+ if(!userData.has_cover) {
+ this.setData({
+ showUser: true
+ })
+ return
+ }
+ // 根据不同身份跳转相关页面
+ if(userData.type == 1) {
+ wx.redirectTo({
+ url: '/pages/stuIndex/index'
+ })
+ } else {
+ wx.redirectTo({
+ url: '/pages/teaIndex/index'
+ })
+ }
+ }
+ })
+ })
+ },
+
+ /**
+ * 微信用户信息授权
+ */
+ getuserInfo(){
+ wx.getUserProfile({
+ desc : "获取你的昵称、头像、地区及性别",
+ success : res => {
+ if(res.errMsg == "getUserProfile:ok"){
+ wx.$api.stuUsers.cover({
+ value: res.userInfo.avatarUrl
+ }).then(res=>{
+ // 用户信息存入缓存
+ const roleId = wx.getStorageSync('status')
+ if(roleId == 1) {
+ wx.redirectTo({
+ url: '/pages/stuIndex/index'
+ })
+ } else {
+ wx.redirectTo({
+ url: '/pages/teaIndex/index'
+ })
+ }
+ })
+ }
+ },
+ fail: res => {
+ //拒绝授权
+ that.showErrorModal('您拒绝了请求');
+ return;
+ }
+ })
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/register/index.json b/手太欠/优迪尔-小程序/pages/register/index.json
new file mode 100644
index 0000000..e6a4c9e
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/register/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 注册"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/register/index.wxml b/手太欠/优迪尔-小程序/pages/register/index.wxml
new file mode 100644
index 0000000..32b5e8c
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/register/index.wxml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+ 优迪尔申请获取以下权限
+ {{needMobile ? '获得你的微信手机号' : '获得你的公开信息(昵称,头像)'}}
+
+ 取消
+
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/register/index.wxss b/手太欠/优迪尔-小程序/pages/register/index.wxss
new file mode 100644
index 0000000..35db3c7
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/register/index.wxss
@@ -0,0 +1,210 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+.header {
+ text-align: center;
+ margin: 50px 0;
+}
+.header image {
+ width: 180px;
+ height: 68px;
+}
+
+
+/* form */
+.login-form {
+ padding: 0 100rpx;
+ display: block;
+}
+
+.inputs {
+ margin-bottom: 30rpx;
+ border: solid 1rpx #eee;
+ border-radius: 60rpx;
+ padding: 0 30rpx;
+ box-sizing: border-box;
+ height: 90rpx;
+ line-height: 90rpx;
+ position: relative;
+}
+
+.inputs-input,
+.inputs-view {
+ line-height: 90rpx;
+ height: 90rpx;
+ font-size: 30rpx;
+ width: 100%;
+}
+
+.inputs image {
+ width: 34rpx;
+ height: 34rpx;
+ position: absolute;
+ right: 20rpx;
+ top: calc(50% - 19rpx);
+}
+
+.login-btn[size="default"] {
+ background: #546fe3;
+ height: 90rpx;
+ line-height: 90rpx;
+ border-radius: 45rpx;
+ padding: 0;
+ margin: 60rpx 0 20rpx;
+ color: white;
+ width: 100%;
+ font-size: 32rpx;
+}
+
+.inputs-code {
+ display: flex;
+}
+
+.inputs-code button {
+ text-align: right;
+ background: transparent;
+ font-size: 28rpx;
+ line-height: 90rpx;
+ padding: 0;
+ margin: 0;
+ color: #ff9954;
+}
+
+/* 地址选择 */
+
+.pickerView-back {
+ background: rgba(0, 0, 0, .3);
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ display: none;
+}
+
+.pickerView-back.active {
+ display: block;
+}
+
+.pickerView-layer {
+ position: fixed;
+ bottom: -571rpx;
+ left: 0;
+ width: 100%;
+ background: white;
+ transition: all .3s;
+ z-index: 9;
+}
+
+.pickerView-layer.active {
+ bottom: 0;
+}
+
+.pickerView-btn {
+ line-height: 90rpx;
+ font-size: 30rpx;
+ padding: 0 30rpx;
+ display: flex;
+ justify-content: space-between;
+}
+
+.pickerView {
+ height: 480rpx;
+ padding: 0 10rpx;
+}
+
+.pickerView-name {
+ line-height: 80rpx;
+ padding: 0 20rpx;
+ text-align: center;
+}
+
+.pickerView-mask {
+ border-top: solid 1rpx #e4e6f2;
+}
+
+.pickerView-indicator {
+ height: 80rpx;
+}
+
+.pickerView-determine {
+ color: #3ec28e;
+}
+
+.pickerView-cancel {
+ color: #747788;
+}
+
+
+/* 微信用户信息弹出 */
+.empowerBack {
+ position: fixed;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ z-index: 100;
+ background: rgba(0, 0, 0, .6);
+}
+
+.empowerCont {
+ position: fixed;
+ left: 100rpx;
+ right: 100rpx;
+ background-color: #fff;
+ z-index: 101;
+ top: 25%;
+ border-radius: 10rpx;
+ padding: 40rpx;
+ box-sizing: border-box;
+}
+
+.headView {
+ color: #4e4e4e;
+}
+
+.headImageView {
+ width: 140rpx;
+ height: 140rpx;
+ border-radius: 50%;
+ overflow: hidden;
+ margin: 0 auto 40rpx;
+}
+
+.headImage {
+ width: 100%;
+ height: 100%;
+}
+
+.contentText {
+ margin: 20rpx 0 40rpx;
+ line-height: 60rpx;
+}
+
+.empowerBtn {
+ display: flex;
+ float: right;
+ height: 40rpx;
+}
+
+.authBtn {
+ width: auto !important;
+ padding: 0 !important;
+ margin: 0 !important;
+ display: inline-block;
+ height: auto;
+ line-height: 40rpx;
+ font-size: 32rpx;
+ font-weight: normal;
+ color: #fd4c44;
+ background: transparent;
+}
+
+.empowerBtn-cancel {
+ font-size: 32rpx;
+ display: inline-block;
+ line-height: 40rpx;
+ margin: 0 40rpx;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/stuIndex/index.js b/手太欠/优迪尔-小程序/pages/stuIndex/index.js
new file mode 100644
index 0000000..358dae2
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/stuIndex/index.js
@@ -0,0 +1,79 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ uesrData : '', //用户信息
+ listArr : [], //课程服务列表
+ page : {}, //下一页
+ lodingStats : false //加载状态
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad(options) {},
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+ // 去掉home导航
+ wx.hideHomeButton()
+
+ // 获取首页列表
+ this.listInfo();
+
+ // 获取用户信息
+ this.uesrInfo();
+ },
+
+ /**
+ * 学生端-用户信息
+ */
+ uesrInfo() {
+ wx.$api.stuUsers.index().then(res=>{
+ this.setData({
+ uesrData: res.data
+ })
+ })
+ },
+
+ /**
+ * 首页列表
+ */
+ listInfo(page) {
+ wx.$api.stuIndex.index(page).then(res=>{
+ let serviceArr = this.data.listArr,
+ newData = []
+ if(page == 1 || page == undefined) serviceArr = []
+ newData = serviceArr.concat(res.data.data)
+ this.setData({
+ listArr : newData,
+ page : res.data.page,
+ lodingStats : false
+ })
+ wx.stopPullDownRefresh()
+ })
+ },
+
+ /**
+ * 上拉加载
+ */
+ onReachBottom(){
+ this.setData({
+ lodingStats: true
+ })
+ let pageNumber = this.data.page.current
+ if(this.data.page.has_more){
+ pageNumber++
+ this.listInfo(pageNumber)
+ }
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/stuIndex/index.json b/手太欠/优迪尔-小程序/pages/stuIndex/index.json
new file mode 100644
index 0000000..2fcecde
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/stuIndex/index.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/stuIndex/index.wxml b/手太欠/优迪尔-小程序/pages/stuIndex/index.wxml
new file mode 100644
index 0000000..843b75c
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/stuIndex/index.wxml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+ {{uesrData.nickname}}
+ 班主任:{{uesrData.parent}}
+
+
+
+
+
+
+
+
+
+ 暂无数据
+
+
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/stuIndex/index.wxss b/手太欠/优迪尔-小程序/pages/stuIndex/index.wxss
new file mode 100644
index 0000000..9d7fb13
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/stuIndex/index.wxss
@@ -0,0 +1,108 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+
+ /* 头部 */
+ .stuTop {
+ position: relative;
+ width: 100%;
+ height: 260rpx;
+}
+
+.stuTop-back {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: 0;
+}
+
+.stuTop-cont {
+ position: absolute;
+ z-index: 2;
+ width: 100%;
+ display: flex;
+ color: #fff;
+ top: 70rpx;
+ left: 0;
+ padding-left: 40rpx;
+ box-sizing: border-box;
+}
+
+.stuTop-cont .stuTop-head {
+ width: 140rpx;
+ height: 140rpx;
+ border-radius: 50%;
+ border: 6rpx solid #79aaf0;
+ box-sizing: border-box;
+ margin-right: 40rpx;
+}
+
+.stuTop-text {
+ width: calc(100% - 260rpx);
+}
+
+.stuTop-text .stuTop-name {
+ font-size: 38rpx;
+ margin: 10rpx 0 15rpx;
+}
+
+.stuTop-text .stuTop-tips {
+ color: #c8d9ff;
+}
+
+/* 列表 */
+.stuFoot {
+ background-color: white;
+}
+
+.stuList {
+ position: relative;
+ width: 100%;
+ padding: 30rpx;
+ box-sizing: border-box;
+}
+
+.stuList .stuList-icon {
+ background-color: #f13a26;
+ width: 54rpx;
+ height: 54rpx;
+ border-radius: 8rpx;
+ text-align: center;
+}
+
+.stuList .stuList-icon image {
+ width: 30rpx;
+ height: 30rpx;
+ margin-top: 12rpx;
+}
+
+.stuList .stuList-cont {
+ position: absolute;
+ padding: 30rpx 30rpx 30rpx 110rpx;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ line-height: 54rpx;
+ box-sizing: border-box;
+ display: flex;
+}
+
+.stuList .stuList-name {
+ flex: 1;
+ margin-right: 40rpx;
+}
+
+.stuList .stuList-more {
+ display: flex;
+ color: #a5a5a5;
+ font-size: 28rpx;
+}
+
+.stuList .stuList-more image {
+ width: 32rpx;
+ height: 32rpx;
+ margin: 12rpx 0 0 10rpx;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/stuUser/index.js b/手太欠/优迪尔-小程序/pages/stuUser/index.js
new file mode 100644
index 0000000..16c8a45
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/stuUser/index.js
@@ -0,0 +1,66 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ uesrData: '', //用户信息
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {},
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+ // 去掉home导航
+ wx.hideHomeButton()
+
+ // 获取用户信息
+ this.uesrInfo();
+ },
+
+ /**
+ * 学生端-用户信息
+ */
+ uesrInfo() {
+ wx.$api.stuUsers.index().then(res=>{
+ this.setData({
+ uesrData: res.data
+ })
+ })
+ },
+
+ /**
+ * 退出登录
+ */
+ login() {
+ wx.showModal({
+ title : '退出登录',
+ content : '是否确定退出登录',
+ success : res=> {
+ if (res.confirm) {
+ // 更新全局状态
+ getApp().globalData.token = ''
+ getApp().globalData.isUser = false
+ wx.clearStorage({
+ success: res=>{
+ // 返回登录
+ wx.reLaunch({
+ url: '/pages/login/index'
+ })
+ }
+ })
+ } else if (res.cancel) {}
+ }
+ })
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/stuUser/index.json b/手太欠/优迪尔-小程序/pages/stuUser/index.json
new file mode 100644
index 0000000..1650267
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/stuUser/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 我的"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/stuUser/index.wxml b/手太欠/优迪尔-小程序/pages/stuUser/index.wxml
new file mode 100644
index 0000000..3a3a3b8
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/stuUser/index.wxml
@@ -0,0 +1,27 @@
+
+
+
+ {{uesrData.nickname}}
+ 班主任:{{uesrData.parent}}
+ 班级:{{uesrData.classMate}}
+
+
+
+
+
+
+ 个人设置
+
+
+
+
+
+
+
+ 退出登录
+
+
+
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/stuUser/index.wxss b/手太欠/优迪尔-小程序/pages/stuUser/index.wxss
new file mode 100644
index 0000000..eba9057
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/stuUser/index.wxss
@@ -0,0 +1,72 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+.userTop {
+ padding: 30rpx;
+ box-sizing: border-box;
+ width: 100%;
+ display: flex;
+ background-color: #fff;
+}
+
+.userTop-img {
+ width: 120rpx;
+ height: 120rpx;
+ border-radius: 50%;
+ border: 2rpx solid #e4e4e4;
+}
+
+.userTop-cont {
+ width: calc(100% - 160rpx);
+ color: #999;
+ font-size: 28rpx;
+ margin-left: 30rpx;
+}
+
+.userTop-name {
+ color: #000;
+ font-size: 32rpx;
+}
+
+.userTop-teacher {
+ margin: 15rpx 0;
+}
+
+/* 工具 */
+.userTool {
+ padding: 20rpx 30rpx;
+ width: 100%;
+ box-sizing: border-box;
+ height: 90rpx;
+ position: relative;
+ background-color: #fff;
+}
+
+.userTool-cont {
+ position: absolute;
+ left: 0;
+ top: 0;
+ padding: 20rpx 30rpx 20rpx 100rpx;
+ width: 100%;
+ box-sizing: border-box;
+ display: flex;
+}
+
+.userTool-name {
+ flex: 1;
+ line-height: 48rpx;
+}
+
+.userTool-img {
+ width: 34rpx;
+ height: 34rpx;
+ opacity: .5;
+ margin-top: 8rpx;
+}
+
+.userTool-icon {
+ width: 48rpx;
+ height: 48rpx;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaActivity-details/index.js b/手太欠/优迪尔-小程序/pages/teaActivity-details/index.js
new file mode 100644
index 0000000..086d26e
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaActivity-details/index.js
@@ -0,0 +1,61 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ isShow : false, //视频展示
+ detailData : '', //活动数据
+ content : '', //活动详情
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ // 活动列表
+ this.detailInfo(options.activeId);
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+
+ },
+
+ /**
+ * 活动列表
+ */
+ detailInfo(id) {
+ wx.$api.teaIndex.detailed(id).then(res=>{
+ this.setData({
+ detailData : res.data,
+ content : res.data.content.replace(/\
+
+
+
+
+
+
+
+
+
+ {{detailData.title}}
+
+ {{detailData.startd_at}} - {{detailData.ended_at}}
+
+
+
+
+ 活动简介
+
+ {{detailData.description}}
+
+
+
+
+ 活动详情
+
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaActivity-details/index.wxss b/手太欠/优迪尔-小程序/pages/teaActivity-details/index.wxss
new file mode 100644
index 0000000..9919500
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaActivity-details/index.wxss
@@ -0,0 +1,84 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+/* 視頻 */
+.reviewVideo {
+ display: block;
+}
+
+.video_bg_black {
+ position: absolute;
+ left: 0;
+ top: 0;
+ bottom: 0;
+ right: 0;
+ background: rgba(0, 0, 0, .4);
+}
+
+.wrapper{
+ width: 100%;
+ padding-top: 60%;
+ position: relative;
+ background: #eee;
+}
+
+.videoPlay{
+ position: absolute;
+ width: 108rpx;
+ height: 108rpx;
+ top: calc(50% - 54rpx);
+ left: calc(50% - 54rpx);
+ z-index: 99;
+}
+
+.video-video,
+.video-cover{
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+}
+
+/* 详情 */
+.activityList-time {
+ color: #999;
+ font-size: 28rpx;
+ display: flex;
+ line-height: 34rpx;
+ padding: 0 30rpx 30rpx 30rpx;
+}
+
+.activityList-time image {
+ width: 32rpx;
+ height: 32rpx;
+ margin-right: 10rpx;
+}
+
+.activityDet {
+ width: 100%;
+ background-color: #fff;
+ margin-bottom: 30rpx;
+}
+
+.activityList-title,
+.activityDet-cont,
+.activityDet-des {
+ padding: 20rpx 30rpx;
+ box-sizing: border-box;
+}
+
+.activityDet-des {
+ font-size: 28rpx;
+ padding-top: 0;
+}
+
+.activityList-title {
+ font-weight: 600;
+}
+
+.activityDet-cont {
+ margin-top: 20rpx;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaActivity-list/index.js b/手太欠/优迪尔-小程序/pages/teaActivity-list/index.js
new file mode 100644
index 0000000..c76581e
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaActivity-list/index.js
@@ -0,0 +1,69 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ activityData: [], //活动列表
+ page : {}, //下一页
+ lodingStats : false, //加载状态
+ activityId : '', //活动列表id
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ activityId: options.categoryId
+ })
+
+ // 活动列表
+ this.listInfo();
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {},
+
+ /**
+ * 活动列表
+ */
+ listInfo(page) {
+ wx.$api.teaIndex.activity(this.data.activityId, page).then(res=>{
+ let activityArr = this.data.activityData,
+ newData = []
+ if(page == 1 || page == undefined) activityArr = []
+ newData = activityArr.concat(res.data.data)
+
+ this.setData({
+ activityData: newData,
+ page : res.data.page,
+ lodingStats : false
+ })
+ wx.stopPullDownRefresh()
+ })
+ },
+
+ /**
+ * 上拉加载
+ */
+ onReachBottom(){
+ this.setData({
+ lodingStats: true
+ })
+ let pageNumber = this.data.page.current
+ if(this.data.page.has_more){
+ pageNumber++
+ this.listInfo(pageNumber)
+ }
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaActivity-list/index.json b/手太欠/优迪尔-小程序/pages/teaActivity-list/index.json
new file mode 100644
index 0000000..3c8b5fc
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaActivity-list/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 活动列表"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaActivity-list/index.wxml b/手太欠/优迪尔-小程序/pages/teaActivity-list/index.wxml
new file mode 100644
index 0000000..7631589
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaActivity-list/index.wxml
@@ -0,0 +1,23 @@
+
+
+
+ {{item.title}}
+ {{item.startd_at}} - {{item.ended_at}}
+
+
+
+
+
+
+ 加载中...
+
+
+ 没有更多了~
+
+
+
+
+
+
+ 暂无数据
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaActivity-list/index.wxss b/手太欠/优迪尔-小程序/pages/teaActivity-list/index.wxss
new file mode 100644
index 0000000..b115800
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaActivity-list/index.wxss
@@ -0,0 +1,41 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+.activityList {
+ padding: 30rpx;
+ box-sizing: border-box;
+ width: 100%;
+ background: #fff;
+ margin-bottom: 30rpx;
+}
+
+.activityList-time {
+ margin: 20rpx 0;
+ color: #999;
+ font-size: 28rpx;
+ display: flex;
+ line-height: 34rpx;
+}
+
+.activityList-time image {
+ width: 32rpx;
+ height: 32rpx;
+ margin-right: 10rpx;
+}
+
+.activityList-img {
+ width: 100%;
+ padding-top: 50%;
+ position: relative;
+ border-radius: 20rpx;
+ overflow: hidden;
+}
+
+.activityList-img image {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaActivity/index.js b/手太欠/优迪尔-小程序/pages/teaActivity/index.js
new file mode 100644
index 0000000..0b40864
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaActivity/index.js
@@ -0,0 +1,69 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ serviceData : [], //课程服务列表
+ page : {}, //下一页
+ lodingStats : false, //加载状态
+ listId : '', //列表id
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ listId: options.categoryId
+ })
+
+ // 获取活动列表
+ this.listInfo();
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+
+ },
+
+ /**
+ * 活动列表
+ */
+ listInfo(page) {
+ wx.$api.teaIndex.index(this.data.listId, page).then(res=>{
+ let serviceArr = this.data.serviceData,
+ newData = []
+ if(page == 1 || page == undefined) serviceArr = []
+ newData = serviceArr.concat(res.data.data)
+
+ this.setData({
+ serviceData : newData,
+ page : res.data.page,
+ lodingStats : false
+ })
+ wx.stopPullDownRefresh()
+ })
+ },
+
+ /**
+ * 上拉加载
+ */
+ onReachBottom(){
+ this.setData({
+ lodingStats: true
+ })
+ let pageNumber = this.data.page.current
+ if(this.data.page.has_more){
+ pageNumber++
+ this.listInfo(pageNumber)
+ }
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaActivity/index.json b/手太欠/优迪尔-小程序/pages/teaActivity/index.json
new file mode 100644
index 0000000..3c8b5fc
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaActivity/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 活动列表"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaActivity/index.wxml b/手太欠/优迪尔-小程序/pages/teaActivity/index.wxml
new file mode 100644
index 0000000..795a9a9
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaActivity/index.wxml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+ {{item.title}}
+ 查看活动
+
+
+
+
+
+
+
+ 加载中...
+
+
+ 没有更多了~
+
+
+
+
+
+
+ 暂无数据
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaActivity/index.wxss b/手太欠/优迪尔-小程序/pages/teaActivity/index.wxss
new file mode 100644
index 0000000..96c88d6
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaActivity/index.wxss
@@ -0,0 +1,59 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+/* 列表 */
+.teaActivity {
+ background-color: white;
+}
+
+.activityList {
+ position: relative;
+ width: 100%;
+ padding: 30rpx;
+ box-sizing: border-box;
+}
+
+.activityList-icon {
+ background-color: #3185fe;
+ width: 54rpx;
+ height: 54rpx;
+ border-radius: 8rpx;
+ text-align: center;
+}
+
+.activityList-icon image {
+ width: 30rpx;
+ height: 30rpx;
+ margin-top: 12rpx;
+}
+
+.activityList-cont {
+ position: absolute;
+ padding: 30rpx 30rpx 30rpx 110rpx;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ line-height: 54rpx;
+ box-sizing: border-box;
+ display: flex;
+}
+
+.activityList-name {
+ flex: 1;
+ margin-right: 40rpx;
+}
+
+.activityList-more {
+ display: flex;
+ color: #a5a5a5;
+ font-size: 28rpx;
+}
+
+.activityList-more image {
+ width: 32rpx;
+ height: 32rpx;
+ margin: 12rpx 0 0 10rpx;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass-build/index.js b/手太欠/优迪尔-小程序/pages/teaClass-build/index.js
new file mode 100644
index 0000000..ca960e0
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass-build/index.js
@@ -0,0 +1,61 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ dataType : '', //build为搭建图 lesson为课程教案
+ extralId : '', //详情id
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ console.log(options)
+ if (options.type == 'build') {
+ wx.setNavigationBarTitle({
+ title: '优迪尔在线教育 搭建图'
+ })
+ } else if (options.type == 'lesson') {
+ wx.setNavigationBarTitle({
+ title: '优迪尔在线教育 课程教案'
+ })
+ }
+
+ this.setData({
+ dataType: options.type,
+ extralId: options.id
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+ // 获取详情数据
+ this.extralInfo();
+ },
+
+ /**
+ * 详情数据
+ */
+ extralInfo() {
+ let dataUrl = '' //定义接口来源名称
+ // 课程教案接口
+ if(this.data.dataType == 'lesson') dataUrl = wx.$api.teaIndex.extralPlan(this.data.extralId)
+ // 搭建图接口
+ if(this.data.dataType == 'build') dataUrl = wx.$api.teaIndex.extralArch(this.data.extralId)
+
+ dataUrl.then(res=>{
+ this.setData({
+ extralata : res.data.replace(/\
+
+ {{dataType == 'build' ? '搭建图' : '课程教案'}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass-build/index.wxss b/手太欠/优迪尔-小程序/pages/teaClass-build/index.wxss
new file mode 100644
index 0000000..31b1c8d
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass-build/index.wxss
@@ -0,0 +1,41 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+.buildLabel {
+ padding: 30rpx;
+ width: 100%;
+ box-sizing: border-box;
+ font-weight: 600;
+ background-color: #fff;
+}
+
+.buildLabel-tips {
+ font-size: 46rpx;
+ text-align: center;
+ color: rgb(247, 150, 70);
+ margin: 50rpx 0 30rpx;
+}
+
+.buildLabel-title {
+ display: flex;
+ margin-bottom: 40rpx;
+}
+
+.buildLabel-title-name {
+ position: relative;
+ padding-left: 25rpx;
+ flex: 1;
+}
+
+.buildLabel-title-name::after {
+ content: '';
+ position: absolute;
+ width: 8rpx;
+ height: 30rpx;
+ background-color: #2170f1;
+ border-radius: 20rpx;
+ left: 0;
+ top: 7rpx;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass-details/index.js b/手太欠/优迪尔-小程序/pages/teaClass-details/index.js
new file mode 100644
index 0000000..3e66f28
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass-details/index.js
@@ -0,0 +1,43 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ classId : '', //班级id
+ classData :'', //班级详情
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ classId : options.id
+ })
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+ // 获取班级详情
+ this.classInfo();
+ },
+
+ /**
+ * 班级详情
+ */
+ classInfo() {
+ wx.$api.teaIndex.gradesDet(this.data.classId).then(res=>{
+ this.setData({
+ classData: res.data
+ })
+ })
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass-details/index.json b/手太欠/优迪尔-小程序/pages/teaClass-details/index.json
new file mode 100644
index 0000000..f01b2ed
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass-details/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 班级详情"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass-details/index.wxml b/手太欠/优迪尔-小程序/pages/teaClass-details/index.wxml
new file mode 100644
index 0000000..56e26b4
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass-details/index.wxml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+ 班级名称
+ {{classData.base.title}}
+
+
+
+
+
+
+
+
+ 主管教师
+ {{classData.base.teacherName}}
+
+
+
+
+
+
+
+ 学员总数
+ {{classData.base.studentCount}}
+
+
+
+
+
+
+
+ 创建时间
+ {{classData.base.created_at}}
+
+
+
+
+
+ 班级学生
+ 查看更多
+
+
+
+
+ {{item.nickname}}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass-details/index.wxss b/手太欠/优迪尔-小程序/pages/teaClass-details/index.wxss
new file mode 100644
index 0000000..28ba6a7
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass-details/index.wxss
@@ -0,0 +1,192 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+.classDet {
+ position: relative;
+ width: 100%;
+}
+
+.classBack {
+ position: absolute;
+ width: 100%;
+ height: 500rpx;
+ left: 0;
+ top: 0;
+ z-index: 1;
+}
+
+.classCont {
+ position: absolute;
+ left: 40rpx;
+ right: 40rpx;
+ top: 400rpx;
+ z-index: 9;
+ border-bottom: 110rpx solid transparent;
+}
+
+.classWhite {
+ background-color: white;
+ border-radius: 20rpx;
+ padding: 40rpx 30rpx;
+ box-sizing: border-box;
+ box-shadow: 0 0 20rpx rgba(85, 114, 254,.2);
+ margin-bottom: 40rpx;
+}
+
+.classOne-lable {
+ position: relative;
+ margin-bottom: 50rpx;
+}
+
+.classOne-lable:last-child {
+ margin-bottom: 0;
+}
+
+.classOne-lable-text {
+ position: absolute;
+ padding: 0 0 0 70rpx;
+ left: 0;
+ top: 0;
+ width: 100%;
+ box-sizing: border-box;
+ display: flex;
+ font-size: 30rpx;
+}
+
+.classOne-lable-name {
+ width: 140rpx;
+ line-height: 60rpx;
+}
+
+.classOne-lable-tips {
+ width: calc(100% - 140rpx);
+ padding: 10rpx 60rpx 0 30rpx;
+ box-sizing: border-box;
+ color: #666;
+}
+
+.classOne-lable-img {
+ background: #effbf2;
+ width: 60rpx;
+ height: 60rpx;
+ padding: 12rpx;
+ box-sizing: border-box;
+ border-radius: 50%;
+}
+
+.classOne-lable-img image {
+ width: 100%;
+ height: 100%;
+}
+
+.classOne-lable-edit {
+ position: absolute;
+ right: 0;
+ top: 8rpx;
+ width: 40rpx;
+ height: 40rpx;
+}
+
+/* 班级学生 */
+.classTwo-title {
+ display: flex;
+ line-height: 30rpx;
+}
+
+.classTwo-title-name {
+ position: relative;
+ padding-left: 25rpx;
+ flex: 1;
+}
+
+.classTwo-title-name::after {
+ content: '';
+ position: absolute;
+ width: 8rpx;
+ height: 30rpx;
+ background-color: #2170f1;
+ border-radius: 20rpx;
+ left: 0;
+ top: 0;
+}
+
+.classTwo-title-more {
+ font-size: 28rpx;
+ color: #999;
+}
+
+.classTwo-list {
+ display: flex;
+ font-size: 26rpx;
+ text-align: center;
+ margin-top: 30rpx;
+}
+
+.classTwo-list-label {
+ margin-right: 50rpx;
+ color: #9c9c9c;
+}
+
+.classTwo-list-head {
+ width: 80rpx;
+ height: 80rpx;
+ border-radius: 50%;
+ margin: 0 auto 10rpx;
+}
+
+/* 二维码 */
+.classThree {
+ position: relative;
+ width: 100%;
+ padding-top: 90%;
+ margin-bottom: 40rpx;
+ border-radius: 20rpx;
+ box-shadow: 0 0 20rpx rgba(85, 114, 254,.2);
+}
+
+.classThree-back {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: 2;
+ top: 0;
+ left: 0;
+}
+
+.classThree-code {
+ position: absolute;
+ width: 50%;
+ height: 50%;
+ top: 28%;
+ left: 25%;
+ z-index: 3;
+}
+
+
+/* footer */
+
+.footer {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ padding-left: 30rpx;
+ padding-right: 30rpx;
+ background: white;
+ z-index: 9;
+ height: 110rpx;
+}
+
+.footer navigator {
+ width: 100%;
+ line-height: 80rpx;
+ height: 80rpx;
+ margin: 15rpx 0;
+ text-align: center;
+ background: #5572fe;
+ font-size: 30rpx;
+ color: white;
+ border-radius: 10rpx
+}
diff --git a/手太欠/优迪尔-小程序/pages/teaClass-form/index.js b/手太欠/优迪尔-小程序/pages/teaClass-form/index.js
new file mode 100644
index 0000000..2fc1da2
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass-form/index.js
@@ -0,0 +1,58 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ dataType : '', //new为新开班 edit为修改班级名称
+ class : {
+ classname : '', //班级名称
+ classId : '', //班级id
+ }
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ dataType : options.type,
+ ['class.classId'] : options.id,
+ ['class.classname'] : options.title
+ })
+ if (options.type == 'new') {
+ wx.setNavigationBarTitle({
+ title: '优迪尔在线教育 新开班'
+ })
+ } else if (options.type == 'edit') {
+ wx.setNavigationBarTitle({
+ title: '优迪尔在线教育 修改名称'
+ })
+ }
+ },
+
+ /**
+ * 班级名称修改提交
+ */
+ uploadFile(e) {
+ let state = this.data.dataType,
+ title = e.detail.value.title,
+ id = this.data.class.classId
+
+ let dataUrl = '' //定义接口来源名称
+ if(state == 'edit') dataUrl = wx.$api.teaIndex.classPut(id,title)// edit为修改班级名称
+ if(state == 'new') dataUrl = wx.$api.teaIndex.gradesAdd(title)// new为新开班
+
+ dataUrl.then(res=>{
+ wx.navigateBack({
+ delta: 1
+ })
+ })
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass-form/index.json b/手太欠/优迪尔-小程序/pages/teaClass-form/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass-form/index.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass-form/index.wxml b/手太欠/优迪尔-小程序/pages/teaClass-form/index.wxml
new file mode 100644
index 0000000..4f25112
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass-form/index.wxml
@@ -0,0 +1,13 @@
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass-form/index.wxss b/手太欠/优迪尔-小程序/pages/teaClass-form/index.wxss
new file mode 100644
index 0000000..28ce029
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass-form/index.wxss
@@ -0,0 +1,72 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+/* 表单 */
+.form {
+ background-color: #fff;
+ padding: 30rpx;
+ box-sizing: border-box;
+ width: 100%;
+ position: relative;
+ height: 130rpx;
+}
+
+.form-img {
+ width: 40rpx;
+ height: 40rpx;
+ margin-top: 20rpx;
+}
+
+.form-input {
+ position: absolute;
+ width: 100%;
+ left: 0;
+ top: 0;
+ padding: 30rpx 30rpx 30rpx 90rpx;
+ box-sizing: border-box;
+ display: flex;
+ line-height: 80rpx;
+}
+
+.form-input-label {
+ width: 180rpx;
+}
+
+.form-input input {
+ border: 2rpx solid #d5d5d5;
+ width: calc(100% - 180rpx);
+ padding: 0 20rpx;
+ box-sizing: border-box;
+ border-radius: 10rpx;
+ height: 74rpx;
+ line-height: 74rpx;
+}
+
+/* footer */
+.form-btn {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ padding-left: 30rpx;
+ padding-right: 30rpx;
+ background: white;
+ z-index: 9;
+ height: 110rpx;
+}
+
+.form-btn button {
+ width: 100% !important;
+ padding: 0;
+ line-height: 80rpx;
+ display: block;
+ height: 80rpx;
+ margin: 15rpx 0;
+ text-align: center;
+ background: #e53134;
+ font-size: 30rpx;
+ color: white;
+ border-radius: 10rpx
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass-select/index.js b/手太欠/优迪尔-小程序/pages/teaClass-select/index.js
new file mode 100644
index 0000000..7175ac4
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass-select/index.js
@@ -0,0 +1,70 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass-select/index.json b/手太欠/优迪尔-小程序/pages/teaClass-select/index.json
new file mode 100644
index 0000000..0b1e228
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass-select/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 选择班级"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass-select/index.wxml b/手太欠/优迪尔-小程序/pages/teaClass-select/index.wxml
new file mode 100644
index 0000000..db848ac
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass-select/index.wxml
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass-select/index.wxss b/手太欠/优迪尔-小程序/pages/teaClass-select/index.wxss
new file mode 100644
index 0000000..6d23fdd
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass-select/index.wxss
@@ -0,0 +1,50 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+/* 列表 */
+.selectFoot {
+ background-color: white;
+}
+
+.selectList {
+ position: relative;
+ width: 100%;
+ padding: 30rpx;
+ box-sizing: border-box;
+}
+
+.selectList-icon {
+ background-color: #f13a26;
+ width: 40rpx;
+ height: 40rpx;
+ line-height: 40rpx;
+ border-radius: 8rpx;
+ text-align: center;
+ color: #fff;
+ font-size: 24rpx;
+}
+
+.selectList-cont {
+ position: absolute;
+ padding: 30rpx 30rpx 30rpx 90rpx;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ line-height: 40rpx;
+ box-sizing: border-box;
+ display: flex;
+}
+
+.selectList-name {
+ flex: 1;
+ margin-right: 40rpx;
+ font-weight: 600;
+}
+
+.selectList-more {
+ color: #3c90ce;
+ font-size: 28rpx;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass/index.js b/手太欠/优迪尔-小程序/pages/teaClass/index.js
new file mode 100644
index 0000000..9a85990
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass/index.js
@@ -0,0 +1,97 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ gradeData : [], //班级列表
+ page : {}, //下一页
+ lodingStats : false, //加载状态
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {},
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow() {
+ // 去掉home导航
+ wx.hideHomeButton()
+
+ // 获取班级列表
+ this.gradeInfo();
+ },
+ /**
+ * 班级列表
+ */
+ gradeInfo(page) {
+ wx.$api.teaIndex.grades(page).then(res=>{
+ let courseArr = this.data.gradeData,
+ newData = []
+ if(page == 1 || page == undefined) courseArr = []
+ newData = courseArr.concat(res.data.data)
+
+ this.setData({
+ gradeData : newData,
+ page : res.data.page,
+ lodingStats : false
+ })
+ wx.stopPullDownRefresh()
+ })
+ },
+
+ /**
+ * 班级删除
+ */
+ gradeRemove(e){
+ let id = e.target.dataset.id,
+ index = e.target.dataset.index,
+ list = this.data.gradeData
+
+ list.splice(index,1)
+
+ wx.showModal({
+ title : '提示',
+ content : '是否删除班级',
+ success : res=> {
+ if (res.confirm) {
+ wx.showLoading({
+ title: '删除中',
+ })
+ wx.$api.teaIndex.remove(id).then(res=>{
+ this.setData({
+ gradeData: list
+ })
+ wx.showToast({
+ title: res.data,
+ icon : "none"
+ })
+ wx.hideLoading()
+ })
+ }
+ }
+ })
+ },
+
+ /**
+ * 上拉加载
+ */
+ onReachBottom(){
+ this.setData({
+ lodingStats: true
+ })
+ let pageNumber = this.data.page.current
+ if(this.data.page.has_more){
+ pageNumber++
+ this.gradeInfo(pageNumber)
+ }
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass/index.json b/手太欠/优迪尔-小程序/pages/teaClass/index.json
new file mode 100644
index 0000000..5269ea7
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 班级"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass/index.wxml b/手太欠/优迪尔-小程序/pages/teaClass/index.wxml
new file mode 100644
index 0000000..d0c707f
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass/index.wxml
@@ -0,0 +1,30 @@
+
+
+
+
+ {{item.title}}
+
+ 优迪尔教育 · 学生{{item.studentCount}}人
+ 状态:{{item.state_text}}
+
+
+ 删除
+
+
+
+
+
+
+ 加载中...
+
+
+ 没有更多了~
+
+
+
+
+
+ 暂无数据
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaClass/index.wxss b/手太欠/优迪尔-小程序/pages/teaClass/index.wxss
new file mode 100644
index 0000000..d4e8251
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaClass/index.wxss
@@ -0,0 +1,71 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+.classCont {
+ margin: 30rpx;
+}
+
+.classList {
+ background-color: #fff;
+ padding: 30rpx;
+ box-sizing: border-box;
+ box-shadow: 0 0 20rpx rgba(0,0,0,.15);
+ border-radius: 20rpx;
+ overflow: hidden;
+ width: 100%;
+ position: relative;
+ margin-bottom: 30rpx;
+}
+
+.classList-title {
+ font-size: 32rpx;
+ font-weight: 600;
+ position: relative;
+ height: 50rpx;
+}
+
+.classList-title text {
+ position: absolute;
+ left: 0;
+ top: 0;
+ z-index: 1;
+}
+
+.classList-title::after {
+ position: absolute;
+ content: '';
+ left: 0;
+ bottom: 0;
+ width: 80rpx;
+ height: 12rpx;
+ background: #f9dd58;
+}
+
+.classList-cont {
+ width: calc(100% - 200rpx);
+ font-size: 30rpx;
+}
+
+.classList-text {
+ margin: 30rpx 0 20rpx;
+}
+
+.classList-tips {
+ color: green;
+}
+
+.classList-del {
+ position: absolute;
+ right: 40rpx;
+ top: 90rpx;
+ background-color: #f86b6b;
+ color: #fff;
+ border-radius: 10rpx;
+ height: 60rpx;
+ line-height: 60rpx;
+ width: 120rpx;
+ text-align: center;
+ font-size: 28rpx;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaDetails/index.js b/手太欠/优迪尔-小程序/pages/teaDetails/index.js
new file mode 100644
index 0000000..7175ac4
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaDetails/index.js
@@ -0,0 +1,70 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaDetails/index.json b/手太欠/优迪尔-小程序/pages/teaDetails/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaDetails/index.json
@@ -0,0 +1,3 @@
+{
+ "usingComponents": {}
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaDetails/index.wxml b/手太欠/优迪尔-小程序/pages/teaDetails/index.wxml
new file mode 100644
index 0000000..a444e7a
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaDetails/index.wxml
@@ -0,0 +1,2 @@
+
+pages/teaDetails/index.wxml
diff --git a/手太欠/优迪尔-小程序/pages/teaDetails/index.wxss b/手太欠/优迪尔-小程序/pages/teaDetails/index.wxss
new file mode 100644
index 0000000..146fee2
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaDetails/index.wxss
@@ -0,0 +1,4 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
diff --git a/手太欠/优迪尔-小程序/pages/teaFeedback-form/index.js b/手太欠/优迪尔-小程序/pages/teaFeedback-form/index.js
new file mode 100644
index 0000000..b2acd71
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaFeedback-form/index.js
@@ -0,0 +1,67 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+
+const app = getApp()
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ stateType : '', //suggest为意见记录 complain为我的建议
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ stateType : options.type
+ })
+
+ if (options.type == 'suggest') {
+ wx.setNavigationBarTitle({
+ title: '优迪尔在线教育 提点意见'
+ })
+ } else if (options.type == 'complain') {
+ wx.setNavigationBarTitle({
+ title: '优迪尔在线教育 提点建议'
+ })
+ }
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 表单提交
+ */
+ submitMake(e){
+ let content = e.detail.value.remark
+ let stateType = this.data.stateType
+ let dataUrl = '' //定义接口来源名称
+ // suggest为意见记录
+ if(stateType == 'suggest') dataUrl = wx.$api.teaUsers.suggestForm
+
+ // complain为我的建议
+ if(stateType == 'complain') dataUrl = wx.$api.teaUsers.complainForm
+
+ dataUrl(content).then(res=>{
+ let pages = getCurrentPages(),
+ prepage = pages[pages.length-2]
+ prepage.setData({
+ stateType: this.data.stateType
+ })
+ // 返回上一页
+ wx.navigateBack();
+ })
+
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaFeedback-form/index.json b/手太欠/优迪尔-小程序/pages/teaFeedback-form/index.json
new file mode 100644
index 0000000..d8bbc60
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaFeedback-form/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": ""
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaFeedback-form/index.wxml b/手太欠/优迪尔-小程序/pages/teaFeedback-form/index.wxml
new file mode 100644
index 0000000..ee7b1e0
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaFeedback-form/index.wxml
@@ -0,0 +1,11 @@
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaFeedback-form/index.wxss b/手太欠/优迪尔-小程序/pages/teaFeedback-form/index.wxss
new file mode 100644
index 0000000..6aae613
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaFeedback-form/index.wxss
@@ -0,0 +1,35 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+
+/* 投诉表单 */
+.public-form {
+ display: block;
+ margin: 20rpx;
+}
+
+.public-label textarea {
+ border: 2rpx solid #ebebeb;
+ border-radius: 10rpx;
+ font-size: 30rpx;
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.public-label textarea {
+ padding: 20rpx;
+}
+
+.public-btn button[size="mini"]{
+ width: 100%;
+ background: #2170f1;
+ height: 90rpx;
+ line-height: 90rpx;
+ font-size: 30rpx;
+ color: white;
+ padding: 0;
+ border-radius: 100rpx;
+ margin: 40rpx 0;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaFeedback/index.js b/手太欠/优迪尔-小程序/pages/teaFeedback/index.js
new file mode 100644
index 0000000..65fe5cb
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaFeedback/index.js
@@ -0,0 +1,89 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ stateType : 'suggest', //suggest为意见记录 complain为我的建议
+ listArr : [], //分类名称
+ page : {}, //分页信息
+ lodingStats : false //加载状态
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+ // 获取列表
+ this.listInfo();
+ },
+
+ /**
+ * 列表
+ */
+ listInfo(page) {
+ let stateType = this.data.stateType
+
+ let dataUrl = '' //定义接口来源名称
+ //suggest为意见记录
+ if(stateType == 'suggest') dataUrl = wx.$api.teaUsers.suggest
+
+ //complain为我的建议
+ if(stateType == 'complain') dataUrl = wx.$api.teaUsers.complain
+
+ dataUrl(page).then(res=>{
+ let listArr = this.data.listArr,
+ newData = []
+ if(page == 1 || page == undefined) listArr = []
+ newData = listArr.concat(res.data.data)
+
+ this.setData({
+ listArr : newData,
+ page : res.data.page,
+ lodingStats : false
+ })
+ wx.stopPullDownRefresh()
+ })
+
+ },
+
+ /**
+ * 切换tab
+ */
+ orderTab(e){
+ let stateType = e.currentTarget.dataset.state
+ if(this.data.stateType != stateType){
+ this.setData({
+ stateType : stateType || ""
+ })
+ // 获取列表
+ this.listInfo();
+ }
+ },
+
+ /**
+ * 上拉加载
+ */
+ onReachBottom(){
+ this.setData({
+ lodingStats: true
+ })
+ let pageNumber = this.data.page.current
+ if(this.data.page.has_more){
+ pageNumber++
+ // 获取周边列表
+ this.listInfo(pageNumber);
+ }
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaFeedback/index.json b/手太欠/优迪尔-小程序/pages/teaFeedback/index.json
new file mode 100644
index 0000000..344482f
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaFeedback/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 投诉反馈"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaFeedback/index.wxml b/手太欠/优迪尔-小程序/pages/teaFeedback/index.wxml
new file mode 100644
index 0000000..67f3661
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaFeedback/index.wxml
@@ -0,0 +1,60 @@
+
+
+
+ 意见
+
+
+ 建议
+
+
+
+
+
+
+
+
+
+
+ {{item.user.nickname}}
+ {{item.created_at}}
+
+
+ {{item.content}}
+
+
+
+
+
+
+
+
+ 加载中...
+
+
+ 没有更多了~
+
+
+
+
+
+
+
+
+ 暂无内容
+
+
+
+
+
+ 意见
+
+
+ 建议
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaFeedback/index.wxss b/手太欠/优迪尔-小程序/pages/teaFeedback/index.wxss
new file mode 100644
index 0000000..626ea87
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaFeedback/index.wxss
@@ -0,0 +1,169 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+/* 投诉tab */
+.header-classify {
+ white-space: nowrap;
+ box-sizing: border-box;
+}
+
+.periphery-tab {
+ position: fixed;
+ left: 0;
+ top: 0;
+ width: 100%;
+ display: flex;
+ height: 80rpx;
+ line-height: 80rpx;
+ z-index: 9;
+ background: white;
+ border-bottom: 2rpx solid #e1e1e1;
+}
+
+.periphery-tab-item {
+ font-size: 30rpx;
+ width: 50%;
+ text-align: center;
+ color: #000;
+ background: white;
+ display: inline-block;
+ position: relative;
+}
+
+.periphery-tab-item.active {
+ color: #2170f1;
+}
+
+.periphery-tab-item::after {
+ position: absolute;
+ content: '';
+ background-color: transparent;
+ width: 50rpx;
+ height: 6rpx;
+ left: calc(50% - 25rpx);
+ bottom: 2rpx;
+ border-radius: 20rpx;
+}
+
+.periphery-tab-item.active::after {
+ background-color: #2170f1;
+}
+
+
+/* 底部工具 */
+.release-btn {
+ background-color: #f5f5f5;
+ position: fixed;
+ left: 0;
+ bottom: 0;
+ z-index: 99;
+ width: 100%;
+ height: 110rpx;
+ font-size: 30rpx;
+ color: white;
+ padding: 15rpx;
+ box-sizing: border-box;
+ overflow: hidden;
+}
+
+.release-btn-make {
+ width: calc(50% - 20rpx);
+ background: #2170f1;
+ height: 84rpx;
+ line-height: 80rpx;
+ font-size: 30rpx;
+ color: white;
+ padding: 0;
+ text-align: center;
+ border-radius: 50rpx;
+ float: left;
+ margin: 0 10rpx;
+ border: transparent solid 2rpx;
+ box-sizing: border-box;
+}
+
+.release-btn-border {
+ background-color: white;
+ border-color: #2170f1;
+ color: #2170f1;
+}
+
+/* 列表 */
+.make {
+ margin: 100rpx 20rpx 0;
+ border-bottom: 110rpx solid transparent;
+}
+
+.makeLIst {
+ margin-bottom: 30rpx;
+ background-color: #fff;
+ padding: 20rpx;
+ box-sizing: border-box;
+ border-radius: 10rpx;
+}
+
+.makeLIst-top {
+ display: flex;
+}
+
+.makeLIst-img {
+ width: 110rpx;
+ height: 110rpx;
+ border-radius: 50%;
+}
+
+.makeLIst-text {
+ width: calc(100% - 130rpx);
+ margin-left: 30rpx;
+}
+
+.makeLIst-list {
+ display: flex;
+ font-size: 28rpx;
+ color: #999;
+ margin: 0 0 15rpx;
+}
+
+.makeLIst-list text {
+ color: #000;
+ font-size: 30rpx;
+ display: block;
+ flex: 1;
+ margin-right: 30rpx;
+ margin-top: -2rpx;
+}
+
+.makeLIst-tips {
+ color: #818181;
+ font-size: 28rpx;
+ text-align: justify;
+}
+
+.makeLIst-reply {
+ margin: 30rpx 0 0 130rpx;
+ border-top: 2rpx solid #eee;
+ padding-top: 20rpx;
+}
+
+/* 社区回复 */
+.community {
+ margin-top: 30rpx;
+ padding-top: 30rpx;
+ border-top: 1rpx solid #e1e1e1;
+ font-size: 28rpx;
+}
+
+.community-title {
+ display: flex;
+ margin-bottom: 20rpx;
+ color: #818181;
+}
+
+.community-title text {
+ color: #000;
+ display: inline-block;
+ flex: 1;
+ width: 80%;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaIndex/index.js b/手太欠/优迪尔-小程序/pages/teaIndex/index.js
new file mode 100644
index 0000000..ee3aa2b
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaIndex/index.js
@@ -0,0 +1,130 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ //用户信息
+ userData : {
+ nickname: '',
+ cover : '',
+ parent : ''
+ },
+ stateType : 'class', //默认课程选项卡 class为课程 service为服务
+ listArr : [], //课程服务列表
+ page : {}, //下一页
+ lodingStats : false //加载状态
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ // 获取首页列表
+ this.listInfo();
+
+ // 获取教师用户信息
+ this.userInfo();
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+ // 去掉home导航
+ wx.hideHomeButton()
+ },
+
+ /**
+ * 教师用户信息
+ */
+ userInfo() {
+ wx.$api.teaUsers.index().then(res=>{
+ this.setData({
+ userData: {
+ nickname: res.data.nickname,
+ cover : res.data.cover,
+ parent : res.data.parent
+ }
+ })
+ }).catch(err=>{})
+ },
+
+ /**
+ * 首页列表
+ */
+ listInfo(page) {
+ let state = this.data.stateType
+ let dataUrl = '' //定义接口来源名称
+ // 课程列表接口
+ if(state == 'class') dataUrl = wx.$api.teaIndex.classList
+
+ // 课程服务列表接口
+ if(state == 'service') dataUrl = wx.$api.teaIndex.index
+
+ dataUrl("", page).then(res=>{
+ let serviceArr = this.data.listArr,
+ newData = []
+ if(page == 1 || page == undefined) serviceArr = []
+ newData = serviceArr.concat(res.data.data)
+
+ this.setData({
+ listArr : newData,
+ page : res.data.page,
+ lodingStats : false
+ })
+ wx.stopPullDownRefresh()
+ })
+ },
+
+ /**
+ * 选显卡选择
+ */
+ orderTab(e){
+ this.setData({
+ stateType: e.currentTarget.dataset.state
+ })
+ // 获取首页列表
+ this.listInfo();
+ },
+
+ /**
+ * 跳转二级页面
+ */
+ levelUrl(e){
+ let id = e.currentTarget.dataset.categoryid || e.currentTarget.dataset.levelid,
+ stateType = this.data.stateType
+
+ // 跳转课程列表
+ if(stateType == 'class') {
+ wx.navigateTo({
+ url: '/pages/publicCourse/index?courseid=' + id + '&type=tea'
+ })
+ return
+ }
+
+ // 跳转课程服务列表
+ wx.navigateTo({
+ url: '/pages/teaActivity/index?categoryId=' + id
+ })
+ },
+
+ /**
+ * 上拉加载
+ */
+ onReachBottom(){
+ this.setData({
+ lodingStats: true
+ })
+ let pageNumber = this.data.page.current
+ if(this.data.page.has_more){
+ pageNumber++
+ this.listInfo(pageNumber)
+ }
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaIndex/index.json b/手太欠/优迪尔-小程序/pages/teaIndex/index.json
new file mode 100644
index 0000000..a098a14
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaIndex/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 首页"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaIndex/index.wxml b/手太欠/优迪尔-小程序/pages/teaIndex/index.wxml
new file mode 100644
index 0000000..39ee835
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaIndex/index.wxml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+ {{userData.nickname}}
+ 机构:{{userData.parent}}
+
+
+
+
+
+
+
+ 课程
+
+
+ 课程服务
+
+
+
+
+
+
+ 暂无数据
+
+
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaIndex/index.wxss b/手太欠/优迪尔-小程序/pages/teaIndex/index.wxss
new file mode 100644
index 0000000..1976445
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaIndex/index.wxss
@@ -0,0 +1,161 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+
+ /* 头部 */
+ .stuTop {
+ position: fixed;
+ left: 0;
+ top: 0;
+ z-index: 9;
+ width: 100%;
+ height: 260rpx;
+}
+
+.stuTop-back {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: 0;
+ left: 0;
+ top: 0;
+}
+
+.stuTop-cont {
+ position: absolute;
+ z-index: 2;
+ width: 100%;
+ display: flex;
+ color: #fff;
+ padding: 0 0 0 40rpx;
+ box-sizing: border-box;
+ top: 70rpx;
+ left: 0;
+}
+
+.stuTop-cont .stuTop-head {
+ width: 120rpx;
+ height: 120rpx;
+ border-radius: 50%;
+ border: 6rpx solid #79aaf0;
+ margin-right: 40rpx;
+}
+
+.stuTop-text {
+ width: calc(100% - 200rpx);
+}
+
+.stuTop-text .stuTop-name {
+ font-size: 36rpx;
+ margin: 10rpx 0 20rpx;
+}
+
+.stuTop-text .stuTop-tips {
+ color: #c8d9ff;
+}
+
+/* 列表 */
+.stuFoot {
+ background-color: white;
+ margin-top: 340rpx;
+}
+
+.stuList {
+ position: relative;
+ width: 100%;
+ padding: 30rpx;
+ box-sizing: border-box;
+}
+
+.stuList .stuList-icon {
+ background-color: #f13a26;
+ width: 54rpx;
+ height: 54rpx;
+ border-radius: 8rpx;
+ text-align: center;
+}
+
+.stuList-icon.active {
+ background-color: #3185fe;
+}
+
+.stuList .stuList-icon image {
+ width: 30rpx;
+ height: 30rpx;
+ margin-top: 12rpx;
+}
+
+.stuList .stuList-cont {
+ position: absolute;
+ padding: 30rpx 30rpx 30rpx 110rpx;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ line-height: 54rpx;
+ box-sizing: border-box;
+ display: flex;
+}
+
+.stuList .stuList-name {
+ flex: 1;
+ margin-right: 40rpx;
+}
+
+.stuList .stuList-more {
+ display: flex;
+ color: #a5a5a5;
+ font-size: 28rpx;
+}
+
+.stuList .stuList-more image {
+ width: 32rpx;
+ height: 32rpx;
+ margin: 12rpx 0 0 10rpx;
+}
+
+/* tab选项卡 */
+
+/* tab */
+
+.order-tab{
+ position: fixed;
+ left: 0;
+ top: 260rpx;
+ width: 100%;
+ display: flex;
+ height: 80rpx;
+ line-height: 80rpx;
+ z-index: 9;
+ background: white;
+}
+
+.order-tab-item {
+ flex: 2;
+ text-align: center;
+ background: white;
+ position: relative;
+ font-weight: 600;
+ color: #616161;
+}
+
+.order-tab-item::after {
+ position: absolute;
+ content: '';
+ left: calc(50% - 30rpx);
+ bottom: 0;
+ background-color: transparent;
+ width: 60rpx;
+ height: 4rpx;
+ z-index: 9;
+}
+
+.order-tab-item.active{
+ color:#546fe3;
+}
+
+.order-tab-item.active::after {
+ background-color: #546fe3;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaSchool/index.js b/手太欠/优迪尔-小程序/pages/teaSchool/index.js
new file mode 100644
index 0000000..6e02439
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaSchool/index.js
@@ -0,0 +1,58 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ teachBase : [], //课后复习详情
+ teachList : [], //阶段列表
+ page : {}, //下一页
+ lodingStats : false, //加载状态
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ // 获取课后复习详情
+ this.listInfo(options.id, '');
+ },
+
+ /**
+ * 获取课后复习详情
+ */
+ listInfo(id, page) {
+ wx.$api.teaIndex.teach(id, page).then(res=>{
+ let teachList = this.data.teachList,
+ newData = []
+ if(page == 1 || page == undefined) teachList = []
+ newData = teachList.concat(res.data.learns.data)
+ this.setData({
+ teachBase : res.data.base,
+ teachList : newData,
+ page : res.data.learns.page,
+ lodingStats : false
+ })
+ wx.stopPullDownRefresh()
+ })
+ },
+
+ /**
+ * 上拉加载
+ */
+ onReachBottom(){
+ this.setData({
+ lodingStats: true
+ })
+ let pageNumber = this.data.page.current
+ if(this.data.page.has_more){
+ pageNumber++
+ this.listInfo('',pageNumber)
+ }
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaSchool/index.json b/手太欠/优迪尔-小程序/pages/teaSchool/index.json
new file mode 100644
index 0000000..0e68d27
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaSchool/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 教学"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaSchool/index.wxml b/手太欠/优迪尔-小程序/pages/teaSchool/index.wxml
new file mode 100644
index 0000000..f89e160
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaSchool/index.wxml
@@ -0,0 +1,75 @@
+
+
+
+ 班级学生
+
+
+
+
+
+
+
+ 班级名称
+ {{teachBase.title}}
+
+
+
+
+
+
+
+ 主管教师
+ {{teachBase.teacherName}}
+
+
+
+
+
+
+
+ 学员总数
+ {{teachBase.studentCount}}
+
+
+
+
+
+
+
+ 创建时间
+ {{teachBase.created_at}}
+
+
+
+
+
+
+ 阶段列表
+
+
+
+
+
+
+ {{item.title}}
+
+
+ 在线课程
+
+
+ 进入
+
+
+
+
+
+
+ 加载中...
+
+
+ 没有更多了~
+
+
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaSchool/index.wxss b/手太欠/优迪尔-小程序/pages/teaSchool/index.wxss
new file mode 100644
index 0000000..3acb7e1
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaSchool/index.wxss
@@ -0,0 +1,131 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+ .schoolDet {
+ margin: 30rpx;
+}
+
+.schoolWhite {
+ background-color: white;
+ border-radius: 20rpx;
+ padding: 30rpx;
+ box-sizing: border-box;
+ box-shadow: 0 0 25rpx rgba(0,0,0,.15);
+ margin-bottom: 40rpx;
+}
+
+/* 班级学生 */
+.teaSchool-lable {
+ position: relative;
+ margin-bottom: 50rpx;
+}
+
+.teaSchool-lable:last-child {
+ margin-bottom: 0;
+}
+
+.teaSchool-lable-text {
+ position: absolute;
+ padding: 0 0 0 80rpx;
+ left: 0;
+ top: 0;
+ width: 100%;
+ box-sizing: border-box;
+ display: flex;
+ line-height: 50rpx;
+}
+
+.teaSchool-lable-name {
+ width: 190rpx;
+}
+
+.teaSchool-lable-tips {
+ width: calc(100% - 190rpx);
+ color: #666;
+}
+
+.teaSchool-lable-img {
+ background: #effbf2;
+ width: 60rpx;
+ height: 60rpx;
+ padding: 12rpx;
+ box-sizing: border-box;
+ border-radius: 50%;
+}
+
+.teaSchool-lable-img image {
+ width: 100%;
+ height: 100%;
+}
+
+
+/* 标题 */
+.teaSchool-title {
+ font-weight: 600;
+ font-size: 34rpx;
+ margin-bottom: 40rpx;
+}
+
+/* 阶段列表 */
+.teaStage-list {
+ position: relative;
+ height: 120rpx;
+ margin-bottom: 40rpx;
+ padding-bottom: 30rpx;
+}
+
+.teaStage-list:last-child {
+ margin: 0;
+ padding: 0;
+}
+
+.teaStage-list:last-child::after {
+ display: none;
+}
+
+.teaStage-list-img {
+ width: 78rpx;
+ height: 78rpx;
+ margin-top: 14rpx;
+}
+
+.teaStage-list-cont {
+ position: absolute;
+ left: 0;
+ top: 0;
+ padding: 0 160rpx 0 100rpx;
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.teaStage-list-name {
+ margin-bottom: 25rpx;
+}
+
+.teaStage-list-tips {
+ line-height: 32rpx;
+ display: flex;
+ color: #a19fa3;
+ font-size: 28rpx;
+}
+
+.teaStage-list-tips image {
+ width: 32rpx;
+ height: 32rpx;
+ margin-right: 15rpx;
+}
+
+.teaStage-list-go {
+ position: absolute;
+ right: 0;
+ top: 30rpx;
+ font-size: 28rpx;
+ border: 2rpx solid #ececec;
+ border-radius: 60rpx;
+ width: 130rpx;
+ line-height: 52rpx;
+ color: #989898;
+ text-align: center;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaStudent-details/index.js b/手太欠/优迪尔-小程序/pages/teaStudent-details/index.js
new file mode 100644
index 0000000..809c8f0
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaStudent-details/index.js
@@ -0,0 +1,62 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ studentId : '', //学生id
+ studentData : '', //学生内容
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ studentId: options.id
+ })
+
+ // 获取学生详情
+ this.studentInfo();
+ },
+
+ /**
+ * 学生详情
+ */
+ studentInfo() {
+ wx.$api.teaIndex.studentDet(this.data.studentId).then(res=>{
+ this.setData({
+ studentData : res.data
+ })
+ })
+ },
+
+ /**
+ * 学生删除
+ */
+ studentRemove(e){
+ let id = e.currentTarget.dataset.id
+ wx.showModal({
+ title : '提示',
+ content : '是否删除此学生',
+ success : res=> {
+ if (res.confirm) {
+ wx.showLoading({
+ title: '删除中',
+ })
+ wx.$api.teaIndex.studentDel(id).then(res=>{
+ wx.hideLoading()
+ wx.navigateBack({
+ delta: 1,
+ })
+ })
+ }
+ }
+ })
+ },
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaStudent-details/index.json b/手太欠/优迪尔-小程序/pages/teaStudent-details/index.json
new file mode 100644
index 0000000..be9fcd2
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaStudent-details/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 学生"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaStudent-details/index.wxml b/手太欠/优迪尔-小程序/pages/teaStudent-details/index.wxml
new file mode 100644
index 0000000..3cf08a2
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaStudent-details/index.wxml
@@ -0,0 +1,32 @@
+
+
+
+
+ {{studentData.nickname}}
+
+ 班级:{{studentData.class}}
+
+
+
+
+
+ {{studentData.mobile}}
+
+
+
+ {{studentData.area}}
+
+
+
+ {{studentData.school}}
+
+
+
+ {{studentData.userClass}}
+
+
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaStudent-details/index.wxss b/手太欠/优迪尔-小程序/pages/teaStudent-details/index.wxss
new file mode 100644
index 0000000..f998352
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaStudent-details/index.wxss
@@ -0,0 +1,100 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+.studentDet {
+ background-color: #fff;
+ padding: 20rpx;
+ box-sizing: border-box;
+ width: 100%;
+}
+
+.studentList {
+ position: relative;
+ width: 100%;
+ height: 160rpx;
+}
+
+.studentList-img {
+ width: 100rpx;
+ height: 100rpx;
+ border-radius: 60%;
+}
+
+.studentList-cont {
+ position: absolute;
+ width: 100%;
+ left: 0;
+ top: 0;
+ padding: 20rpx 20rpx 0 150rpx;
+ box-sizing: border-box;
+}
+
+.studentList-name {
+ margin-bottom: 10rpx;
+ font-weight: 600;
+}
+
+.studentList-class {
+ color: #999;
+ font-size: 28rpx;
+}
+
+.studentDet-label {
+ display: flex;
+ margin: 30rpx 0;
+ line-height: 40rpx;
+}
+
+.studentDet-label:last-child {
+ margin-bottom: 20rpx;
+}
+
+.studentDet-label-icon {
+ width: 40rpx;
+ height: 40rpx;
+ background-color: #b1adaf;
+ border-radius: 10rpx;
+ padding: 5rpx;
+ box-sizing: border-box;
+ margin-right: 20rpx;
+}
+
+.studentDet-label-icon image {
+ width: 100%;
+ height: 100%;
+}
+
+.studentDet-label-name {
+ font-size: 28rpx;
+ color: #999;
+}
+
+
+/* footer */
+
+.footer {
+ position: fixed;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ padding-left: 30rpx;
+ padding-right: 30rpx;
+ background: white;
+ z-index: 9;
+ height: 110rpx;
+}
+
+.footer text {
+ width: 100%;
+ line-height: 80rpx;
+ display: block;
+ height: 80rpx;
+ margin: 15rpx 0;
+ text-align: center;
+ background: #e53134;
+ font-size: 30rpx;
+ color: white;
+ border-radius: 10rpx
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaStudent-list/index.js b/手太欠/优迪尔-小程序/pages/teaStudent-list/index.js
new file mode 100644
index 0000000..c2aedc2
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaStudent-list/index.js
@@ -0,0 +1,81 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ type : '', //页面来源
+ studentsData: [], //活动列表
+ page : {}, //下一页
+ lodingStats : false, //加载状态
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ type: options.type
+ })
+ // 学生列表
+ this.listInfo(options.id, '');
+ },
+
+ /**
+ * 活动列表
+ */
+ listInfo(id, page) {
+ let state = this.data.type
+ let dataUrl = '' //定义接口来源名称
+
+ // userStu为个人中心学生列表 // 班级学生列表
+ if(state == 'userStu') {
+ dataUrl = wx.$api.teaUsers.students
+ } else {
+ dataUrl = wx.$api.teaIndex.students
+ }
+
+ dataUrl(id,page).then(res=>{
+ let studentsData = this.data.studentsData,
+ newData = []
+ if(page == 1 || page == undefined) studentsData = []
+ newData = studentsData.concat(res.data.data)
+ this.setData({
+ studentsData: newData,
+ page : res.data.page,
+ lodingStats : false
+ })
+ wx.stopPullDownRefresh()
+ })
+ },
+
+ /**
+ * 拨打电话
+ */
+ tel(e) {
+ wx.makePhoneCall({
+ phoneNumber: e.currentTarget.dataset.tel,
+ success: {},
+ fail: {}
+ })
+ },
+
+ /**
+ * 上拉加载
+ */
+ onReachBottom(){
+ this.setData({
+ lodingStats: true
+ })
+ let pageNumber = this.data.page.current
+ if(this.data.page.has_more){
+ pageNumber++
+ this.listInfo('',pageNumber)
+ }
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaStudent-list/index.json b/手太欠/优迪尔-小程序/pages/teaStudent-list/index.json
new file mode 100644
index 0000000..be9fcd2
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaStudent-list/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 学生"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaStudent-list/index.wxml b/手太欠/优迪尔-小程序/pages/teaStudent-list/index.wxml
new file mode 100644
index 0000000..cfd152a
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaStudent-list/index.wxml
@@ -0,0 +1,30 @@
+
+
+
+
+ {{item.nickname}}
+
+
+ {{item.mobile}}
+
+
+
+
+
+
+
+
+
+
+ 加载中...
+
+
+ 没有更多了~
+
+
+
+
+
+
+ 暂无数据
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaStudent-list/index.wxss b/手太欠/优迪尔-小程序/pages/teaStudent-list/index.wxss
new file mode 100644
index 0000000..b9e76ea
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaStudent-list/index.wxss
@@ -0,0 +1,62 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+.studentList {
+ background-color: #fff;
+ position: relative;
+ padding: 30rpx;
+ box-sizing: border-box;
+ width: 100%;
+ height: 160rpx;
+}
+
+.studentList-img {
+ width: 100rpx;
+ height: 100rpx;
+ border-radius: 50%;
+}
+
+.studentList-cont {
+ position: absolute;
+ width: 100%;
+ left: 0;
+ top: 0;
+ padding: 30rpx 100rpx 30rpx 160rpx;
+ box-sizing: border-box;
+}
+
+.studentList-name {
+ margin-bottom: 20rpx;
+ font-weight: 600;
+}
+
+.studentList-tel {
+ line-height: 34rpx;
+ display: flex;
+ color: #999;
+}
+
+.studentList-tel image {
+ width: 34rpx;
+ height: 34rpx;
+ margin-right: 10rpx;
+}
+
+.studentList-more {
+ position: absolute;
+ right: 30rpx;
+ top: 60rpx;
+ background-color: #ececec;
+ border-radius: 30rpx;
+ height: 45rpx;
+ width: 70rpx;
+ text-align: center;
+}
+
+.studentList-more image {
+ width: 28rpx;
+ height: 28rpx;
+ margin-top: 8rpx;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaUser/index.js b/手太欠/优迪尔-小程序/pages/teaUser/index.js
new file mode 100644
index 0000000..576d2b2
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaUser/index.js
@@ -0,0 +1,79 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ //用户信息
+ userData : {
+ nickname : '',
+ cover : '',
+ parent : '',
+ class : '',
+ student : ''
+ },
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {},
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+ // 去掉home导航
+ wx.hideHomeButton()
+
+ // 获取教师用户信息
+ this.userInfo();
+ },
+
+ /**
+ * 教师用户信息
+ */
+ userInfo() {
+ wx.$api.teaUsers.index().then(res=>{
+ this.setData({
+ userData: {
+ nickname: res.data.nickname,
+ cover : res.data.cover,
+ parent : res.data.parent,
+ class : res.data.classMateCount,
+ student : res.data.studentCount
+ }
+ })
+ })
+ },
+
+ /**
+ * 退出登录
+ */
+ login() {
+ wx.showModal({
+ title : '退出登录',
+ content : '是否确定退出登录',
+ success : res=> {
+ if (res.confirm) {
+ // 更新全局状态
+ getApp().globalData.token = ''
+ getApp().globalData.isUser = false
+ wx.clearStorage({
+ success: res=>{
+ // 返回登录
+ wx.reLaunch({
+ url: '/pages/login/index'
+ })
+ }
+ })
+ } else if (res.cancel) {}
+ }
+ })
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaUser/index.json b/手太欠/优迪尔-小程序/pages/teaUser/index.json
new file mode 100644
index 0000000..1650267
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaUser/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 我的"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaUser/index.wxml b/手太欠/优迪尔-小程序/pages/teaUser/index.wxml
new file mode 100644
index 0000000..5e24f49
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaUser/index.wxml
@@ -0,0 +1,55 @@
+
+
+
+ {{userData.nickname}}
+ 机构:{{userData.parent}}
+
+
+
+
+
+
+ 学生
+
+ {{userData.student}}
+
+
+
+
+
+
+
+ 班级
+
+ {{userData.class}}
+
+
+
+
+
+
+
+ 新开班
+
+
+
+
+
+
+
+
+ 投诉反馈
+
+
+
+
+
+
+
+
+ 退出登录
+
+
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/teaUser/index.wxss b/手太欠/优迪尔-小程序/pages/teaUser/index.wxss
new file mode 100644
index 0000000..9cf75a4
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/teaUser/index.wxss
@@ -0,0 +1,83 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+ .userTop {
+ display: flex;
+ padding: 30rpx;
+ box-sizing: border-box;
+ width: 100%;
+ background-color: #fff;
+}
+
+.userTop-img {
+ width: 100rpx;
+ height: 100rpx;
+ border-radius: 50%;
+}
+
+.userTop-cont {
+ margin-left: 30rpx;
+ width: calc(100% - 130rpx);
+ color: #999;
+}
+
+.userTop-name {
+ color: #000;
+}
+
+.userTop-teacher {
+ margin-top: 15rpx;
+ font-size: 28rpx;
+}
+
+/* 工具 */
+.userTool {
+ margin: 20rpx 0;
+ padding: 20rpx 30rpx;
+ width: 100%;
+ box-sizing: border-box;
+ height: 90rpx;
+ position: relative;
+ background-color: #fff;
+}
+
+.userTool-cont {
+ position: absolute;
+ left: 0;
+ top: 0;
+ padding: 20rpx 30rpx 20rpx 100rpx;
+ width: 100%;
+ box-sizing: border-box;
+ display: flex;
+}
+
+.userTool-name {
+ flex: 1;
+ line-height: 48rpx;
+}
+
+.userTool-number {
+ line-height: 48rpx;
+ display: flex;
+}
+
+.userTool-number text {
+ padding-right: 10rpx;
+ color: #999;
+}
+
+.userTool-img {
+ width: 34rpx;
+ height: 34rpx;
+ opacity: .5;
+ margin-top: 8rpx;
+}
+
+.userTool-icon {
+ width: 48rpx;
+ height: 48rpx;
+ border-radius: 10rpx;
+ overflow: hidden;
+}
diff --git a/手太欠/优迪尔-小程序/pages/userHead/index.js b/手太欠/优迪尔-小程序/pages/userHead/index.js
new file mode 100644
index 0000000..59536a1
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/userHead/index.js
@@ -0,0 +1,61 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ avatar : '', //默认头像
+ avatarNew : '', //新上传头像
+ avatarPath : '', //新头像保存
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {
+ this.setData({
+ avatar : options.cover,
+ })
+ },
+
+ /**
+ * 上传封面
+ */
+ upShopLogo() {
+ wx.navigateTo({
+ url: '/pages/works_img/works_img'
+ })
+ },
+
+ /**
+ * 接受页面裁剪返回参数
+ */
+ updImg(e){
+ wx.showLoading({
+ title: "上传中"
+ })
+ wx.$api.file.uploadImg(e).then(res=>{
+ this.setData({
+ avatarNew : res.show_path,
+ avatarPath : res.path
+ })
+ wx.hideLoading()
+ })
+ },
+
+ /**
+ * 上传服务器
+ */
+ uploadFile (e) {
+ wx.$api.stuUsers.cover({value: this.data.avatarPath}).then(res=>{
+ wx.navigateBack({
+ detail: 1
+ })
+ })
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/userHead/index.json b/手太欠/优迪尔-小程序/pages/userHead/index.json
new file mode 100644
index 0000000..f11e245
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/userHead/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 设置头像"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/userHead/index.wxml b/手太欠/优迪尔-小程序/pages/userHead/index.wxml
new file mode 100644
index 0000000..4ea1f5f
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/userHead/index.wxml
@@ -0,0 +1,13 @@
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/userHead/index.wxss b/手太欠/优迪尔-小程序/pages/userHead/index.wxss
new file mode 100644
index 0000000..17fa5ce
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/userHead/index.wxss
@@ -0,0 +1,74 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+/* 头像 */
+.head_img {
+ padding-bottom: 60rpx;
+}
+
+.upLoad {
+ position: relative;
+ width: 200rpx;
+ height: 200rpx;
+ z-index: 9;
+ margin: 50rpx auto 0;
+ border-radius: 50%;
+ overflow: hidden;
+}
+
+.upLoadBack {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ z-index: 9;
+ left: 0;
+ top: 0;
+}
+
+.upLoadImg {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ left: 0;
+ top: 0;
+ z-index: 99;
+}
+
+.upLoadEdit {
+ position: absolute;
+ width: 100%;
+ height: 60rpx;
+ left: 0;
+ bottom: 0;
+ z-index: 10;
+ background: rgba(0, 0, 0, .3);
+ text-align: center;
+ line-height: 60rpx;
+ color: #fff;
+ font-size: 26rpx;
+ opacity: .9;
+}
+
+
+/* 提交按钮 */
+
+.form-btn{
+ padding: 30rpx 30rpx;
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.form-btn button{
+ background: -webkit-linear-gradient(left,#5978f9,#4466f4);
+ box-shadow: 0rem 0.1rem 0.4rem rgb(107, 124, 197);
+ color: white;
+ height: 86rpx;
+ line-height: 86rpx;
+ font-size: 28rpx;
+ padding: 0 !important;
+ margin: 40rpx auto !important;
+ width: 55% !important;
+ border-radius: 100rpx;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/userSetting/index.js b/手太欠/优迪尔-小程序/pages/userSetting/index.js
new file mode 100644
index 0000000..b47324b
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/userSetting/index.js
@@ -0,0 +1,38 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ uesrData: '', //用户信息
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad (options) {},
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow () {
+ // 获取用户信息
+ this.uesrInfo();
+ },
+
+ /**
+ * 学生端-用户信息
+ */
+ uesrInfo() {
+ wx.$api.stuUsers.index().then(res=>{
+ this.setData({
+ uesrData: res.data
+ })
+ })
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/userSetting/index.json b/手太欠/优迪尔-小程序/pages/userSetting/index.json
new file mode 100644
index 0000000..b21944d
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/userSetting/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 设置"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/userSetting/index.wxml b/手太欠/优迪尔-小程序/pages/userSetting/index.wxml
new file mode 100644
index 0000000..7987787
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/userSetting/index.wxml
@@ -0,0 +1,15 @@
+
+
+ 我的头像
+
+
+
+
+
+
+
+ 手机号码
+ {{uesrData.username}}
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/userSetting/index.wxss b/手太欠/优迪尔-小程序/pages/userSetting/index.wxss
new file mode 100644
index 0000000..1675474
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/userSetting/index.wxss
@@ -0,0 +1,43 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+/* 工具 */
+.userTool {
+ padding: 30rpx;
+ width: 100%;
+ box-sizing: border-box;
+ height: 120rpx;
+ position: relative;
+}
+
+.userTool-cont {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ padding: 20rpx 80rpx 20rpx 30rpx;
+ box-sizing: border-box;
+ display: flex;
+ line-height: 80rpx;
+ background-color: #fff;
+}
+
+.userTool-name {
+ flex: 1;
+}
+
+.userTool-head {
+ width: 80rpx;
+ height: 80rpx;
+ border-radius: 50%;
+}
+
+.userTool-img {
+ position: absolute;
+ right: 30rpx;
+ top: 44rpx;
+ width: 30rpx;
+ height: 30rpx;
+}
diff --git a/手太欠/优迪尔-小程序/pages/userTel/index.js b/手太欠/优迪尔-小程序/pages/userTel/index.js
new file mode 100644
index 0000000..62822ef
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/userTel/index.js
@@ -0,0 +1,89 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ codename : '获取验证码',
+ mobileNo : '', //手机号
+ code : '', //验证码
+ },
+
+ /**
+ * mobileNo
+ */
+ getNameValue(e) {
+ this.setData({
+ mobileNo: e.detail.value
+ })
+ },
+
+ /**
+ * 获取code
+ */
+ getCode(){
+ let mobileNo = this.data.mobileNo
+ wx.$api.auth.sms(mobileNo).then(res=>{
+ wx.showToast({
+ title : '发送成功',
+ icon : 'success',
+ duration: 2000
+ })
+ this.setData({
+ iscode: res.data.data
+ })
+ var num = 61;
+ var timer = setInterval(function () {
+ num--;
+ if (num <= 0) {
+ clearInterval(timer);
+ _this.setData({
+ codename : '重新发送',
+ disabled : false
+ })
+
+ } else {
+ _this.setData({
+ codename : num + "s后重新获取",
+ disabled : true
+ })
+ }
+ }, 1000)
+ }).catch(err=>{})
+ },
+
+ /**
+ * 获取后输入code
+ */
+ getCodeValue (e) {
+ this.setData({
+ code: e.detail.value
+ })
+ },
+
+ /**
+ * forgetlogin
+ */
+ forgetlogin(e){
+ let mobileNo = e.detail.value.mobile,
+ code = this.data.code
+ wx.$api.stuUsers.mobile(mobileNo, code).then(res=>{
+ // 更新全局状态
+ getApp().globalData.token = ''
+ getApp().globalData.isUser = false
+ wx.clearStorage({
+ success: res=>{
+ // 返回登录
+ wx.reLaunch({
+ url: '/pages/login/index',
+ })
+ }
+ })
+ })
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/userTel/index.json b/手太欠/优迪尔-小程序/pages/userTel/index.json
new file mode 100644
index 0000000..d80ed98
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/userTel/index.json
@@ -0,0 +1,4 @@
+{
+ "usingComponents": {},
+ "navigationBarTitleText": "优迪尔在线教育 修改手机"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/userTel/index.wxml b/手太欠/优迪尔-小程序/pages/userTel/index.wxml
new file mode 100644
index 0000000..58304c5
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/userTel/index.wxml
@@ -0,0 +1,20 @@
+
+
+ 验证成功!请设置新手机账号
+
+
+
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/userTel/index.wxss b/手太欠/优迪尔-小程序/pages/userTel/index.wxss
new file mode 100644
index 0000000..2bb36dd
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/userTel/index.wxss
@@ -0,0 +1,74 @@
+/*
+ * 手太欠
+ * 愿这世界都如故事里一样 美好而动人~
+ */
+
+/* 验证提示 */
+.telTips {
+ display: flex;
+ line-height: 36rpx;
+ padding: 20rpx;
+ color: #8b8b8b;
+ background-color: white;
+}
+
+.telTips-img {
+ width: 36rpx;
+ height: 36rpx;
+ margin-right: 20rpx;
+}
+
+/* 登录框 */
+.login-content {
+ padding: 40rpx;
+}
+
+.inputs {
+ position: relative;
+ padding: 0 30rpx;
+ display: flex;
+ box-sizing: border-box;
+ height: 110rpx;
+ background-color: white;
+}
+
+.inputs label {
+ line-height: 110rpx;
+ width: 260rpx;
+}
+
+.inputs-input,
+.inputs-code {
+ line-height: 110rpx;
+ height: 110rpx;
+ font-size: 30rpx;
+ width: calc(100% - 130rpx);
+}
+
+.inputs-code {
+ display: flex;
+}
+
+.inputs-code button {
+ text-align: right;
+ line-height: 110rpx;
+ background: transparent;
+ padding: 0;
+ margin: 0;
+ font-weight: normal;
+ color: #1f5db7;
+ font-size: 28rpx;
+}
+
+.login-btn {
+ background: -webkit-linear-gradient(left,#5978f9,#4466f4);
+ box-shadow: 0rem 0.1rem 0.4rem rgb(107, 124, 197);
+ color: white;
+ height: 86rpx;
+ line-height: 86rpx;
+ font-size: 28rpx;
+ padding: 0 !important;
+ margin: 40rpx auto !important;
+ width: 55% !important;
+ border-radius: 100rpx;
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/works_img/works_img.js b/手太欠/优迪尔-小程序/pages/works_img/works_img.js
new file mode 100644
index 0000000..f5808ab
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/works_img/works_img.js
@@ -0,0 +1,46 @@
+Page({
+ data: {
+ src:'',
+ width: 250,//宽度
+ height: 250,//高度
+ },
+ onLoad(options) {
+ // 存储是否跳转复购积分
+ wx.setStorageSync('updType', true)
+
+ //获取到image-cropper实例
+ this.cropper = this.selectComponent("#image-cropper")
+ wx.chooseImage({
+ count : 1,
+ success : res=>{
+ this.setData({
+ src: res.tempFilePaths[0]
+ })
+ },
+ fail : err=>{
+ this.cancel()
+ }
+ })
+ },
+ cropperload(e){
+ },
+ loadimage(e){
+ wx.hideLoading()
+ //重置图片角度、缩放、位置
+ this.cropper.imgReset();
+ },
+ worksImg(e) {
+ this.cropper.getImg(res=>{
+ var pages = getCurrentPages();
+ var prevPage = pages[pages.length - 2]; //上一个编辑款项页面
+
+ prevPage.updImg(res.url)
+ wx.navigateBack()
+ wx.setStorageSync('updType', false)
+ })
+ },
+ cancel(){
+ wx.navigateBack()
+ wx.setStorageSync('updType', false)
+ }
+})
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/works_img/works_img.json b/手太欠/优迪尔-小程序/pages/works_img/works_img.json
new file mode 100644
index 0000000..f62de31
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/works_img/works_img.json
@@ -0,0 +1,7 @@
+{
+ "usingComponents": {
+ "image-cropper" : "/commpent/image-cropper-master/image-cropper"
+ },
+ "disableScroll" : true,
+ "navigationBarTitleText": "头像选择"
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/pages/works_img/works_img.wxml b/手太欠/优迪尔-小程序/pages/works_img/works_img.wxml
new file mode 100644
index 0000000..0da2a12
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/works_img/works_img.wxml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/手太欠/优迪尔-小程序/pages/works_img/works_img.wxss b/手太欠/优迪尔-小程序/pages/works_img/works_img.wxss
new file mode 100644
index 0000000..24fbb06
--- /dev/null
+++ b/手太欠/优迪尔-小程序/pages/works_img/works_img.wxss
@@ -0,0 +1,21 @@
+
+.works-footer{
+ display: flex;
+ position: fixed;
+ z-index: 99;
+ color: white;
+ height: 100rpx;
+ left: 0;
+ bottom: 0;
+ padding-bottom: 40rpx;
+ width: 100%;
+ background: black;
+}
+
+.works-footer-item{
+ width: 50%;
+ line-height: 100rpx;
+ text-align: center;
+ font-size: 30rpx;
+ font-weight: bold;
+}
diff --git a/手太欠/优迪尔-小程序/project.config.json b/手太欠/优迪尔-小程序/project.config.json
new file mode 100644
index 0000000..664d2ae
--- /dev/null
+++ b/手太欠/优迪尔-小程序/project.config.json
@@ -0,0 +1,98 @@
+{
+ "description": "项目配置文件",
+ "packOptions": {
+ "ignore": []
+ },
+ "setting": {
+ "urlCheck": true,
+ "es6": true,
+ "enhance": false,
+ "postcss": true,
+ "preloadBackgroundData": false,
+ "minified": true,
+ "newFeature": true,
+ "coverView": true,
+ "nodeModules": false,
+ "autoAudits": false,
+ "showShadowRootInWxmlPanel": true,
+ "scopeDataCheck": false,
+ "uglifyFileName": false,
+ "checkInvalidKey": true,
+ "checkSiteMap": true,
+ "uploadWithSourceMap": true,
+ "compileHotReLoad": false,
+ "useMultiFrameRuntime": true,
+ "useApiHook": true,
+ "babelSetting": {
+ "ignore": [],
+ "disablePlugins": [],
+ "outputPath": ""
+ },
+ "bundle": false,
+ "useIsolateContext": true,
+ "useCompilerModule": true,
+ "userConfirmedUseCompilerModuleSwitch": false,
+ "userConfirmedBundleSwitch": false,
+ "packNpmManually": false,
+ "packNpmRelationList": [],
+ "minifyWXSS": true,
+ "useApiHostProcess": true
+ },
+ "compileType": "miniprogram",
+ "libVersion": "2.16.1",
+ "appid": "wx95e93d7057444477",
+ "projectname": "%E4%BC%98%E8%BF%AA%E5%B0%94",
+ "debugOptions": {
+ "hidedInDevtools": []
+ },
+ "isGameTourist": false,
+ "simulatorType": "wechat",
+ "simulatorPluginLibVersion": {},
+ "condition": {
+ "plugin": {
+ "list": []
+ },
+ "game": {
+ "list": []
+ },
+ "gamePlugin": {
+ "list": []
+ },
+ "miniprogram": {
+ "list": [
+ {
+ "id": 2,
+ "name": "pages/index/index",
+ "pathName": "pages/index/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "id": 6,
+ "name": "pages/login/index",
+ "pathName": "pages/login/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/stuUser/index",
+ "pathName": "pages/stuUser/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/teaUser/index",
+ "pathName": "pages/teaUser/index",
+ "query": "id=328427",
+ "scene": null
+ },
+ {
+ "name": "pages/teaIndex/index",
+ "pathName": "pages/teaIndex/index",
+ "query": "id=328427",
+ "scene": null
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/project.private.config.json b/手太欠/优迪尔-小程序/project.private.config.json
new file mode 100644
index 0000000..2fd75e6
--- /dev/null
+++ b/手太欠/优迪尔-小程序/project.private.config.json
@@ -0,0 +1,96 @@
+{
+ "setting": {},
+ "condition": {
+ "plugin": {
+ "list": []
+ },
+ "game": {
+ "list": []
+ },
+ "gamePlugin": {
+ "list": []
+ },
+ "miniprogram": {
+ "list": [
+ {
+ "name": "pages/stuIndex/index",
+ "pathName": "pages/stuIndex/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/teaIndex/index",
+ "pathName": "pages/teaIndex/index",
+ "query": "roleId=2",
+ "scene": null
+ },
+ {
+ "name": "pages/teaUser/index",
+ "pathName": "pages/teaUser/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/register/index",
+ "pathName": "pages/register/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/teaSchool/index",
+ "pathName": "pages/teaSchool/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/login/index",
+ "pathName": "pages/login/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/publicReview/index",
+ "pathName": "pages/publicReview/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/publicCourse/index",
+ "pathName": "pages/publicCourse/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/stuUser/index",
+ "pathName": "pages/stuUser/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/teaActivity-list/index",
+ "pathName": "pages/teaActivity-list/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/teaStudent-details/index",
+ "pathName": "pages/teaStudent-details/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/teaFeedback/index",
+ "pathName": "pages/teaFeedback/index",
+ "query": "",
+ "scene": null
+ },
+ {
+ "name": "pages/teaClass/index",
+ "pathName": "pages/teaClass/index",
+ "query": "",
+ "scene": null
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/sitemap.json b/手太欠/优迪尔-小程序/sitemap.json
new file mode 100644
index 0000000..ca02add
--- /dev/null
+++ b/手太欠/优迪尔-小程序/sitemap.json
@@ -0,0 +1,7 @@
+{
+ "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html",
+ "rules": [{
+ "action": "allow",
+ "page": "*"
+ }]
+}
\ No newline at end of file
diff --git a/手太欠/优迪尔-小程序/static/icon/add_card_icon.png b/手太欠/优迪尔-小程序/static/icon/add_card_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..87c6abb600d7551cb419988764bb8a3205231c5f
GIT binary patch
literal 569
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
literal 0
HcmV?d00001
diff --git a/手太欠/优迪尔-小程序/static/icon/arrow_black.png b/手太欠/优迪尔-小程序/static/icon/arrow_black.png
new file mode 100644
index 0000000000000000000000000000000000000000..5228adec702f583e0ff5c7a954ff7ff719962813
GIT binary patch
literal 206
zcmeAS@N?(olHy`uVBq!ia0vp^{2r*f=Q*p*=KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA
z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e
zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5
z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7}
zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf
zVxhe-O!X
z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4
ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR
z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N
z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd
zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS=
zB9o|3v?Y2H`NVi)In3rTB8+ej^>
zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv
zrJpiFnV_ms&8eQ$2WpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^
zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN
zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS
zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^#
z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q
z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6
zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a
zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT
zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8
zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|=
zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^=
zgB=w+-tUy`ytONMS8KgRef4hA?t0j
zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3?
zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7
zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W
z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU
zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R
za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)}
z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C
z0|H4zK~#9!)Y;#QlvNzZ@t2dC)<%dDU04*9QA&tcQBfB*L`#|LrVYA-EgD%y_x%N3
zM@3~t#q?ve(zO;XrY?$pTm=zQXhBjC5lMumNk6uW{RT^%v-Irj%pA|<^Wk~U=l%Vj
zU*GdAn3|eWrM23fC3pst%|?B1tKHE}Yc}d#y}z)c`9*jMn=sO9cTQo_09&ns`NcEL
z!w_D@@L2(X$I$rCvkS2Yx19|Dhj1eCdb*a5L<9EAuq*VtSc5EASN+}QyGXoxTRQtfH;7yIGvD};Z59JEWnJ3J%-;i
z5c_abu>jHb1;m*Q#D3gZGJqH^%?!lyfV`n(0I`{E%RpQlkk^+CAXcC848$b?xwd2g
zcn#a}M?zbH39Km@0A2}*KNH%eIDqR)27nfJ;ID*s8Q#X~k^w~humgYRAX@Ft>XHHA
z#aS|OIo|39q8|Y80(NE~uE73QyK`;H0Pq|h%s^a;iB`LFP00YT8xJ9M6>?QTtSlJ-
zp2jZxme5wloLE&d06c|vGTPO6v~+-7xILpC!6X0oLkkCB{sBCW1qtma);AmVqorox
zems#e|1~yLG2d^1`|xC@&u_x~SEVka+hgLMlhD4!NV8G@axNe4#~c`s^*Kj~zJG&v&@98}q#e*oJ3kGmpdFcG4?=u`r(+^WWnxd{JsavlY+d+=TW6M(}y5
zC1oSbFG^@X;%g7gL>%#noi2UM=`B8k>>utU^NAv3=^5-YyUrhf?
z`=B3(tlAvR-(mXZ?ShQ?&3M0GN8DOP^TVd^K8F(WuMzq8`dMI9`BOh)`t~_x{zRDX
z=yR)*f#Hn#ld%uHJBZ@C3c$l?XCglk^OXRajrwWai#KLOehUs7VEbnP^!UGIb+C9E
P00000NkvXXu0mjfVC2RG
literal 0
HcmV?d00001
diff --git a/手太欠/优迪尔-小程序/static/icon/retreat_icon.png b/手太欠/优迪尔-小程序/static/icon/retreat_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..c024033c8917497d4313fe964c5f9edf9a4f678d
GIT binary patch
literal 2550
zcmb_e3vAOy7`{FT|O
z{{Q>$yR$zkF3RuMduVR}KtEeSUI}i)%9*CZ*F9M|PR%qnv7vnqJAo6OE4#)mje;72kfLVjOB;zAZO%FE$qWFvw8!OY1Xhto!)F7OK2I^L^CFu)lsaG(=(h_OT-QmM-$y1t|afZSS=gop!U$bL
zrEDQ_rd<;J!31qUij@f$j1Ivd&1x7$QWWUs6S!cd=!*t-^EC1yKMKea#j7X0dQ&U_C$LG6Ou>#6Au&7>HulVv!)mSZySgJR#fp$z{M?B+R-Ao?Lz?e)VlL*#eRb13a?jSx8(V
zjo0huJO~-wtky&6GYv*cuQwpdrR7bOPUkVW4Q68||zj%$Dbs6@j8UQXXa5>r(z(kz$@XYt%lq>pXCjV-UIcN(O^WB9w8G25z?orkL&NAf84CBfn!Z^vp#eFu>$ku
zFi?i@7E6=QuITAJ`S6Uy72UV|{%1wBvb}a0j(*UK(RbapVmzhMF1)`hw}}r6en@wp=mHfdIm_os(VJ1T?J)J-{)S2QPAO5KuuE~Uj2**zn2Y+1G8aK+`VmCacd
zH_!sG_Ei3s=1tpc_E{I6xVwGmE2_r*yWfbM++BMUv|g(UPri3Elr~b;c4+XIDXq_e
zqyN;cTfApX*0B0s7eVA+ZC2{-zNK5H&fat`x&Go|@O#D0q3Vllc!;4-+JvN|CtJ3C
z*w{cwJu?O@pP=sBIDDy9-4`U|gde!HeVU_AFCB#c4K@!r;7}J{q8o^`o*)URLG*Iv
zy_r&)m?Zm$gozB03UWY;N_}m1HUO;vq^1DOn!`N!;J{>k=eDJVr=>Op^6LVi<@#`w
zig=+Fj!PXBwjAU-%`F4NcMsI|YdVGBwgZGPvfq
z_dBG>q~yjsrC@)5)#IB)z#-$Z}|24s?)#x^(bd`
e*==*ftzNIbK5(OWzHyWCXJ(sNl(%t0Y5l)^99_=<
literal 0
HcmV?d00001
diff --git a/手太欠/优迪尔-小程序/static/icon/search_icon.png b/手太欠/优迪尔-小程序/static/icon/search_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..e8ed94be024a0846a4821fd768a679f9925405c9
GIT binary patch
literal 1496
zcmV;}1tLK6!u#ps1)51D(<+6OBN&4P#&dVrcpF`cu|
zy_eAhlgKD7qlanqQZ$NQLPhx@3X;^Q{BWJwD|XCW&g?nQ>&!*L{pG@(wf<}U&faJ5
zz1AR{;sa0d{NXf!@B0&l5Vr%st%x`p07f&j`8DG(BK~Q9nR%Pmdbj6!Uk>H0w>$$%
zsfCDm2Qx1!n9u=4+$x0FST2`;D(E}NyfA?8`}aGJb00I$Ji*}q0Kf)Bth=uJRjXRL
z0es&dCxqAp05`N6EWz(60IVXS^{wdU0;tt$Q+j)QKLCL7DM5}R;yz|R1OR^kz%gbX
zi-=zL@Gd6SJ#A6sq}k-;1;d*>Q;6YrPKq=yaEx=x3#s_t31zJnHM4vpu4+!
zWTVk|3jk)vh&@I`tMdklv#ZzZ7x(t|)|vU*nCB~rXjLBlL;$5!6#&Y%h!A30rBeAK
zk9Zy%rIZ2yH)bYgd!F}UmPRZ<5CqpD;zu!}7kZv|FiW)PbEVWv0N_Ra5OIg=x;JHM
z#R4d$UIhSix;BT_dWq+G8?ppjeIAD4F8gd@=CYKso~AhnAP9nai1@bUw4I0+w3=KV
zzc37MX6Egd?R!LYV%4Z+D!d4PZ~-W+J+~U2osS34-7vMEt>uxtxfe&jY}g
z(Rw0!q@4iW-QA-ajfUAsnuD2_Nh#Om0Wjs?n26!CMD#>E0hCf50MM|OP~st)x`ddy
zDy1BBPZ>_2z8d>iYX%lbDeXh-WDji?#mON+}=BH3MB;U1yd`C36-`h%BSun0XozC6$#^(F}N+HBk
z)((_f*u-7to&$i#Es;WXYAZxasdEr0AO~3k~-h^Ei~CL+GBwLUar#E3(U
zM&nfG?%Oej&E`UCWg#cgO#qbSQ=tpoOKB>JkUh)6;X=(xpoe^gEu^05Ko-ej+kUwK-0D
y0F!CoVLIMiW9)y)o)Q3Q>+CeZP=B~Z_5K4#Noh}Qt{oi!0000Wa0}-`~ND{zGBAO79(?oO(z{fK)GoNHKnco`;
zZ$khhBO}YFr>D0P(RKjK8!-GAfZg$Ud}nue_aC+NbpbrjyF)}i1aRd7Lq!oe3E&if
zD~RYC08I-tX8}B^wH~boQ4_!z^8|o50W7lyM8vvvw^C}~`1tr(Hk+Lb4HpW9*u=!d
z?L^c;L|Xw|66}>kq>GtHq9CdQc%JvLhSZ^RwNRMR{%U0
zYDHudGuw|jZ$$#+^ZC`KQt1#8T?Akjz_VKGw-+8Z#ykX|M?~IY=Jyuvd!F}*h}d&B
zZ;HO}-{&~aH}iEB03t%hm?K2g76`T0+Kc*XW6S{n4~WPZGp~u#xURdAi1q|~#{t}=
zwJwI*3INaZxvKs|B?Jw5z@9b6
zybRz)`&%j1o=T$*FLXlHQQdad>TS{dJ{2ds^JK7Xh0``_B%BJwITzYqnm
zhln=XjppX&L}zEGt$?a)F#y?YRwa|kX(CF9$N^^VhyoZTqI*STikVw#U2gYsx!g%2
zx{4^eoruVUQtI(^I{j4;1{+=*=EGX+_6h)FjIGhTY>Q>)s~Z3~qm;V5j&8Ho`gN;u
zUH7OhZxQ*CnQxBrzz0P1sBJ!4>qI>O*L648)(qe*5k(E1pGu|Dj<9cE{CBeK!1OKG9HhA2cX;wL?k~uJG(iP$;>oL
zP$(3ZO-@ekBBCw9ncrfuSbI-TPdIDJe^-4G<@5Pg-}euOPb=Fzlv2H6SE~hLjInP6
z7r-rn?oR;gwAST3sOy1H;CbGSzVClVMAy$d^o58FwzRbDoj)s#F-=5dpK-R2%y;uC
z-}gHl$2k%OUH4TyFfh=plo|>vqtOrqy8XWIZ*m-`+<^WSKzJyZ%iV29H4)uYD|CVW
zAQ8QkPN(
Y0iU?^Fo>c4SO5S307*qoM6N<$f~{jZTmS$7
literal 0
HcmV?d00001
diff --git a/手太欠/优迪尔-小程序/static/img/address_back.png b/手太欠/优迪尔-小程序/static/img/address_back.png
new file mode 100644
index 0000000000000000000000000000000000000000..58f5daf53ee1c987a5a644f3c7080bf926a32c50
GIT binary patch
literal 3210
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
L$Zr|x_tKjOottMY_S=W7|43Fh
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