From 48145f787eda81815f653ad21161a60e89b6a303 Mon Sep 17 00:00:00 2001
From: riku <risaku@163.com>
Date: 星期三, 13 十一月 2024 16:41:32 +0800
Subject: [PATCH] 2024.11.13

---
 pages/mExtra/pSupervisionSummary/index.js                   |   38 
 res/icons/ic_supervised.png                                 |    0 
 miniprogram_npm/tdesign-miniprogram/tag/tag.wxml            |   23 
 pages/mService/cPracticaloperation/index.js                 |  103 
 pages/mLedger/components/ledger-tab/index.wxss              |    1 
 pages/mLedger/home/tab.wxss                                 |   44 
 miniprogram_npm/tdesign-miniprogram/divider/divider.json    |    3 
 pages/mService/cPracticaloperation/index.wxss               |  123 
 pages/mService/cScheduletoday/index.js                      |    2 
 pages/mLedger/home/list.wxss                                |   22 
 miniprogram_npm/tdesign-miniprogram/divider/divider.wxss    |   83 
 miniprogram_npm/tdesign-miniprogram/divider/type.js         |    1 
 pages/mExtra/components/pSupervisionCard/index.js           |   30 
 pages/mLedger/components/ledger-tab/index.json              |    4 
 service/baserequest.js                                      |   14 
 pages/mLedger/ledgerhistory/ledgerhistory.wxml              |    2 
 miniprogram_npm/tdesign-miniprogram/badge/type.d.ts         |    8 
 pages/mSelfPatrol/patrolhome/index.wxml                     |   37 
 service/taskservice.js                                      |   80 
 pages/mExtra/components/pSupervisionCard/index.wxml         |   13 
 miniprogram_npm/tdesign-miniprogram/badge/badge.wxs         |    2 
 miniprogram_npm/tdesign-miniprogram/icon/icon.wxss          | 3378 +++++++++++++++++++++++-
 pages/mLedger/ledgerhome/ledgerhome.js                      |    1 
 miniprogram_npm/tdesign-miniprogram/tag/tag.js              |   93 
 pages/mAssessment/assessment/index.js                       |  214 +
 miniprogram_npm/tdesign-miniprogram/badge/README.md         |   32 
 pages/mUser/baseC/cCompanyInfo/cCompanyInfo.wxml            |    4 
 miniprogram_npm/tdesign-miniprogram/tag/tag.wxss            |  244 +
 app.wxss                                                    |    1 
 pages/mLedger/components/ledger-tab/index.wxml              |    2 
 pages/mLedger/home/summary.wxss                             |   13 
 miniprogram_npm/tdesign-miniprogram/tag/type.d.ts           |   38 
 pages/mLedger/ledgerhome/ledgerhome.wxss                    |    1 
 pages/mExtra/time.wxs                                       |   18 
 pages/mLedger/home/summary.js                               |   27 
 pages/mAssessment/assessment/index.wxml                     |   97 
 miniprogram_npm/tdesign-miniprogram/tag/tag.json            |    7 
 pages/mAssessment/index/index.wxss                          |    1 
 miniprogram_npm/tdesign-miniprogram/tag/props.js            |   36 
 pages/mService/cPracticaloperation/index.json               |    4 
 pages/mExtra/pSupervisionchange/pSupervisionchange.js       |  127 
 pages/mLedger/ledgerupload/ledgerupload.wxml                |   49 
 app.json                                                    |   16 
 pages/mSelfPatrol/components/emergency-self-patrol/index.js |    6 
 model/ledger.js                                             |  138 
 res/icons/ic_unsupervised.png                               |    0 
 miniprogram_npm/tdesign-miniprogram/divider/divider.js      |   44 
 style/iconfont.wxss                                         |  306 ++
 pages/mExtra/pSupervisionSummary/index.wxss                 |   77 
 service/userservice.js                                      |   13 
 pages/mUser/mine/mine.wxml                                  |    7 
 pages/mExtra/components/pSupervisionCard/index.json         |    4 
 miniprogram_npm/tdesign-miniprogram/divider/props.js        |   25 
 pages/mLedger/components/ledger-tab/index.js                |   24 
 pages/mLedger/home/index.wxml                               |   12 
 miniprogram_npm/tdesign-miniprogram/divider/README.en-US.md |   12 
 pages/mLedger/ledgerhome/ledgerhome.wxml                    |   25 
 pages/mLedger/home/summary.wxml                             |   91 
 component/mygallery/mygallery.wxml                          |   73 
 miniprogram_npm/tdesign-miniprogram/divider/type.d.ts       |   26 
 miniprogram_npm/tdesign-miniprogram/badge/badge.json        |    2 
 pages/mExtra/pSupervisionSummary/index.json                 |    7 
 pages/mAssessment/assessment/index.wxss                     |  191 +
 component/uploader/uploader.wxml                            |  104 
 miniprogram_npm/tdesign-miniprogram/tag/props.d.ts          |    3 
 pages/mSelfPatrol/components/self-patrol/index.wxml         |    8 
 pages/mAssessment/index/index.wxml                          |    2 
 pages/home/home.json                                        |    4 
 miniprogram_npm/tdesign-miniprogram/badge/README.en-US.md   |   25 
 miniprogram_npm/tdesign-miniprogram/badge/badge.wxss        |    6 
 miniprogram_npm/tdesign-miniprogram/divider/README.md       |   40 
 pages/mLedger/home/tab.js                                   |   16 
 pages/mLedger/ledgerupload/ledgerupload.wxss                |   12 
 project.private.config.json                                 |    2 
 miniprogram_npm/tdesign-miniprogram/divider/divider.d.ts    |   19 
 pages/mAssessment/index/index.json                          |    3 
 pages/mLedger/home/index.js                                 |  107 
 pages/mLedger/home/toolbar.wxml                             |   36 
 miniprogram_npm/tdesign-miniprogram/icon/README.md          |    2 
 pages/mAssessment/assessment/index.json                     |   10 
 pages/mAssessment/grade/grade.js                            |   50 
 pages/mExtra/pSupervisionSummary/index.wxml                 |   76 
 pages/mLedger/home/toolbar.js                               |   55 
 pages/mAssessment/index/index.js                            |   66 
 pages/mSelfPatrol/components/self-patrol/index.js           |   14 
 pages/mExtra/pSupervisionSummary/fetchSubtask.js            |   93 
 pages/home/home.js                                          |    2 
 pages/mLedger/home/index.wxss                               |   15 
 pages/mLedger/home/toolbar.wxss                             |   59 
 pages/mLedger/home/tab.wxml                                 |   50 
 pages/mService/cPracticaloperation/index.wxml               |   32 
 miniprogram_npm/tdesign-miniprogram/divider/divider.wxml    |   13 
 pages/mLedger/ledgerupload/ledgerupload.json                |    1 
 pages/mLedger/home/list.wxml                                |   60 
 miniprogram_npm/tdesign-miniprogram/tag/README.en-US.md     |  100 
 pages/mAssessment/assessment/chart.js                       |  143 +
 miniprogram_npm/tdesign-miniprogram/divider/props.d.ts      |    3 
 component/gallery/gallery.wxml                              |   17 
 pages/mUser/mine/mine.js                                    |    4 
 pages/home/home.wxml                                        |    6 
 miniprogram_npm/tdesign-miniprogram/tag/type.js             |    1 
 service/scheduleservice.js                                  |   35 
 miniprogram_npm/tdesign-miniprogram/icon/icon.json          |    1 
 pages/mExtra/components/pSupervisionCard/index.wxss         |   26 
 miniprogram_npm/tdesign-miniprogram/tag/tag.d.ts            |   28 
 pages/mLedger/home/list.js                                  |    9 
 /dev/null                                                   |  320 --
 pages/mLedger/home/index.json                               |    9 
 miniprogram_npm/tdesign-miniprogram/tag/README.md           |  142 +
 pages/mAssessment/assessment/chart.wxml                     |   30 
 110 files changed, 7,103 insertions(+), 875 deletions(-)

diff --git a/app.json b/app.json
index 1b79d85..b3fdbf0 100644
--- a/app.json
+++ b/app.json
@@ -6,7 +6,7 @@
     "pages/text/text",
     "pages/mUser/userloginpw/userloginpw",
     "pages/home/home",
-    "pages/mAssessment/assessment/assessment",
+    "pages/mAssessment/assessment/index",
     "pages/mAssessment/grade/grade",
     "pages/mAssessment/gradedetail/gradedetail",
     "pages/mAssessment/gradereport/gradereport",
@@ -57,7 +57,9 @@
     "pages/mExtra/pSupervisionchange/pSupervisionchange",
     "pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail",
     "pages/mSelfPatrol/patrolhome/index",
-    "pages/mUser/sceneauthentication/industrial/index"
+    "pages/mUser/sceneauthentication/industrial/index",
+    "pages/mExtra/pSupervisionSummary/index",
+    "pages/mLedger/home/index"
   ],
   "window": {
     "backgroundTextStyle": "light",
@@ -76,13 +78,13 @@
         "selectedIconPath": "res/icons/tab_1_select.png"
       },
       {
-        "pagePath": "pages/mAssessment/assessment/assessment",
+        "pagePath": "pages/mAssessment/assessment/index",
         "text": "鑷祴鏅鸿瘎",
         "iconPath": "/res/icons/tab_2.png",
         "selectedIconPath": "res/icons/tab_2_select.png"
       },
       {
-        "pagePath": "pages/mLedger/ledgerhome/ledgerhome",
+        "pagePath": "pages/mLedger/home/index",
         "text": "鍙拌处绠$悊",
         "iconPath": "/res/icons/tab_5.png",
         "selectedIconPath": "res/icons/tab_5_select.png"
@@ -107,6 +109,7 @@
   "usingComponents": {
     "t-icon": "tdesign-miniprogram/icon/icon",
     "t-button": "tdesign-miniprogram/button/button",
+    "t-badge": "tdesign-miniprogram/badge/badge",
     "t-tabs": "tdesign-miniprogram/tabs/tabs",
     "t-tab-panel": "tdesign-miniprogram/tab-panel/tab-panel",
     "t-sticky": "tdesign-miniprogram/sticky/sticky",
@@ -120,6 +123,9 @@
     "t-cell": "tdesign-miniprogram/cell/cell",
     "t-checkbox": "tdesign-miniprogram/checkbox/checkbox",
     "t-checkbox-group": "tdesign-miniprogram/checkbox-group/checkbox-group",
-    "t-dialog": "tdesign-miniprogram/dialog/dialog"
+    "t-dialog": "tdesign-miniprogram/dialog/dialog",
+    "t-tag": "tdesign-miniprogram/tag/tag",
+    "t-image": "tdesign-miniprogram/image/image",
+    "t-divider": "tdesign-miniprogram/divider/divider"
   }
 }
\ No newline at end of file
diff --git a/app.wxss b/app.wxss
index e2442f0..17f665b 100644
--- a/app.wxss
+++ b/app.wxss
@@ -1,5 +1,6 @@
 /**app.wxss**/
 @import "/libs/weui.wxss";
+@import "/style/iconfont.wxss";
 
 page {
   --td-brand-color: #59D5B3;
diff --git a/component/gallery/gallery.wxml b/component/gallery/gallery.wxml
index 9a31a4c..c49f5b4 100644
--- a/component/gallery/gallery.wxml
+++ b/component/gallery/gallery.wxml
@@ -1,9 +1,22 @@
 <view class="weui-gallery {{show ? 'weui-gallery_show' : ''}} {{extClass}}">
   <view class="weui-gallery__info">{{current+1}}/{{currentImgs.length}}</view>
-  <swiper class="weui-gallery__img__wrp" bindtap="hideGallery" indicator-dots="{{false}}" bindchange="change" current="{{current}}" autoplay="{{false}}" duration="{{500}}">
+  <swiper
+    class="weui-gallery__img__wrp"
+    bindtap="hideGallery"
+    indicator-dots="{{false}}"
+    bindchange="change"
+    current="{{current}}"
+    autoplay="{{false}}"
+    duration="{{500}}"
+  >
     <block wx:for="{{currentImgs}}" wx:key="index">
       <swiper-item>
-        <image mode="aspectFit" class="weui-gallery__img" src="{{item}}"></image>
+        <image
+          mode="aspectFit"
+          class="weui-gallery__img"
+          src="{{item}}"
+          show-menu-by-longpress="{{true}}"
+        ></image>
       </swiper-item>
     </block>
   </swiper>
diff --git a/component/mygallery/mygallery.wxml b/component/mygallery/mygallery.wxml
index 0be9eaf..9d89b88 100644
--- a/component/mygallery/mygallery.wxml
+++ b/component/mygallery/mygallery.wxml
@@ -1,18 +1,39 @@
 <!--component/mygallery/mygallery.wxml-->
 <page-container show="{{show}}">
   <view class="fyui-gallery {{show ? 'fyui-gallery_show' : ''}} {{extClass}}">
-    <mp-icon wx:if="{{showRemark}}" class="fyui-gallery__close" icon="close" color="white" size="26" bindtap="hideGallery"></mp-icon>
-    <view class="fyui-gallery__info" wx:if="{{true}}">{{current+1}} / {{currentImgs.length}}</view>
-    <swiper class="fyui-gallery__img__wrp" bindtap="toggle" indicator-dots="{{false}}" bindanimationfinish="change" current="{{current}}" autoplay="{{false}}" duration="{{500}}">
+    <mp-icon
+      wx:if="{{showRemark}}"
+      class="fyui-gallery__close"
+      icon="close"
+      color="white"
+      size="26"
+      bindtap="hideGallery"
+    ></mp-icon>
+    <view class="fyui-gallery__info" wx:if="{{true}}"
+      >{{current+1}} / {{currentImgs.length}}</view
+    >
+    <swiper
+      class="fyui-gallery__img__wrp"
+      bindtap="toggle"
+      indicator-dots="{{false}}"
+      bindanimationfinish="change"
+      current="{{current}}"
+      autoplay="{{false}}"
+      duration="{{500}}"
+    >
       <block wx:for="{{currentImgs}}" wx:key="index">
         <swiper-item>
-          <image mode="aspectFit" src="{{item}}" class="fyui-gallery__img"
-            style="transform: translate({{translateX}}px, {{translateY}}px) scale({{scale}}) rotate({{rotate}}deg);" 
+          <image
+            mode="aspectFit"
+            src="{{item}}"
+            class="fyui-gallery__img"
+            style="transform: translate({{translateX}}px, {{translateY}}px) scale({{scale}}) rotate({{rotate}}deg);"
             bindtouchstart="touchStart"
             bindtouchmove="{{endScale <= 1 ? 'touchMove' : ''}}"
             capture-catch:touchmove="{{endScale > 1 ? 'touchMove' : undefined}}"
             bindtouchend="touchEnd"
-            ></image>
+            show-menu-by-longpress="{{true}}"
+          ></image>
         </swiper-item>
       </block>
     </swiper>
@@ -20,14 +41,44 @@
       <view class="fyui-gallery__title">{{title}}</view>
       <view class="fyui-gallery__des">{{remark}}</view>
     </view>
-    <scroll-view wx:if="{{showRemark}}" class="swiper-tab" scroll-into-view="item{{current > 2 ? current - 2 : 0}}" scroll-x="true" show-scrollbar="true" scroll-with-animation="true">
+    <scroll-view
+      wx:if="{{showRemark}}"
+      class="swiper-tab"
+      scroll-into-view="item{{current > 2 ? current - 2 : 0}}"
+      scroll-x="true"
+      show-scrollbar="true"
+      scroll-with-animation="true"
+    >
       <block wx:for="{{currentImgs}}" wx:key="i">
-        <image id="item{{index}}" src="{{item}}" class="swiper-tab-list {{current == index ? 'on' : ''}}" data-current="{{index}}" bindtap="swichNav" mode="aspectFit"></image>
+        <image
+          id="item{{index}}"
+          src="{{item}}"
+          class="swiper-tab-list {{current == index ? 'on' : ''}}"
+          data-current="{{index}}"
+          bindtap="swichNav"
+          mode="aspectFit"
+        ></image>
       </block>
     </scroll-view>
     <view wx:if="{{showRemark}}" class="fyui-gallery__tool">
-      <mp-icon mode="filled" class="fyui-gallery__tool__rotate" icon="refresh" color="white" size="26" data-clockwise="{{true}}" bindtap="rotateImg"></mp-icon>
-      <mp-icon mode="filled" class="fyui-gallery__tool__rotate left" icon="refresh" color="white" size="26" data-clockwise="{{false}}" bindtap="rotateImg"></mp-icon>
+      <mp-icon
+        mode="filled"
+        class="fyui-gallery__tool__rotate"
+        icon="refresh"
+        color="white"
+        size="26"
+        data-clockwise="{{true}}"
+        bindtap="rotateImg"
+      ></mp-icon>
+      <mp-icon
+        mode="filled"
+        class="fyui-gallery__tool__rotate left"
+        icon="refresh"
+        color="white"
+        size="26"
+        data-clockwise="{{false}}"
+        bindtap="rotateImg"
+      ></mp-icon>
     </view>
   </view>
-</page-container>
\ No newline at end of file
+</page-container>
diff --git a/component/uploader/uploader.wxml b/component/uploader/uploader.wxml
index c51dab3..2b17a15 100644
--- a/component/uploader/uploader.wxml
+++ b/component/uploader/uploader.wxml
@@ -1,37 +1,79 @@
 <view class="weui-uploader {{extClass}}">
-    <view class="weui-uploader__hd">
-      <view class="weui-uploader__overview">
-          <view wx:if="{{title}}" class="weui-uploader__title {{titleClass}}" >{{title}}</view>
-          <view wx:else><slot name="title"></slot></view>
-          <view class="weui-uploader__info {{countInfo}}" wx:if="{{maxCount > 1}}">{{currentFiles.length}}/{{maxCount}}</view>
-
-      </view>
-        <view wx:if="{{tips}}" class="weui-uploader__tips">{{tips}}</view>
-        <view wx:else><slot name="tips"></slot></view>
+  <view class="weui-uploader__hd">
+    <view class="weui-uploader__overview">
+      <view wx:if="{{title}}" class="weui-uploader__title {{titleClass}}"
+        >{{title}}</view
+      >
+      <view wx:else><slot name="title"></slot></view>
+      <view class="weui-uploader__info {{countInfo}}" wx:if="{{maxCount > 1}}"
+        >{{currentFiles.length}}/{{maxCount}}</view
+      >
     </view>
-    <view class="weui-uploader__bd">
-        <view class="weui-uploader__files">
-            <block wx:for="{{currentFiles}}" wx:key="*this">
-                <view wx:if="{{item.error}}" data-index="{{index}}" bindtap="previewImage" class="weui-uploader__file weui-uploader__file_status">
-                    <image class="weui-uploader__img" src="{{item.url}}" mode="aspectFill" />
-                    <view class="weui-uploader__file-content">
-                        <icon type="warn" size="23" color="#F43530"></icon>
-                    </view>
-                </view>
-                <view wx:elif="{{item.loading}}" data-index="{{index}}" bindtap="previewImage" class="weui-uploader__file weui-uploader__file_status">
-                    <image class="weui-uploader__img" src="{{item.url}}" mode="aspectFill" />
-                    <view class="weui-uploader__file-content">
-                    <view class="weui-loading"></view>
-                    </view>
-                </view>
-                <view wx:else class="weui-uploader__file" data-index="{{index}}" bindtap="previewImage">
-                    <image class="weui-uploader__img" src="{{item.url}}" mode="aspectFill" />
-                </view>
-            </block>
+    <view wx:if="{{tips}}" class="weui-uploader__tips">{{tips}}</view>
+    <view wx:else><slot name="tips"></slot></view>
+  </view>
+  <view class="weui-uploader__bd">
+    <view class="weui-uploader__files">
+      <block wx:for="{{currentFiles}}" wx:key="*this">
+        <view
+          wx:if="{{item.error}}"
+          data-index="{{index}}"
+          bindtap="previewImage"
+          class="weui-uploader__file weui-uploader__file_status"
+        >
+          <image
+            class="weui-uploader__img"
+            src="{{item.url}}"
+            mode="aspectFill"
+          />
+          <view class="weui-uploader__file-content">
+            <icon type="warn" size="23" color="#F43530"></icon>
+          </view>
         </view>
-        <view wx:if="{{currentFiles.length < maxCount}}" class="weui-uploader__input-box" hover-class="weui-active">
-            <view class="weui-uploader__input" bindtap="chooseImage"></view>
+        <view
+          wx:elif="{{item.loading}}"
+          data-index="{{index}}"
+          bindtap="previewImage"
+          class="weui-uploader__file weui-uploader__file_status"
+        >
+          <image
+            class="weui-uploader__img"
+            src="{{item.url}}"
+            mode="aspectFill"
+          />
+          <view class="weui-uploader__file-content">
+            <view class="weui-loading"></view>
+          </view>
         </view>
+        <view
+          wx:else
+          class="weui-uploader__file"
+          data-index="{{index}}"
+          bindtap="previewImage"
+        >
+          <image
+            class="weui-uploader__img"
+            src="{{item.url}}"
+            mode="aspectFill"
+          />
+        </view>
+      </block>
     </view>
+    <view
+      wx:if="{{currentFiles.length < maxCount}}"
+      class="weui-uploader__input-box"
+      hover-class="weui-active"
+    >
+      <view class="weui-uploader__input" bindtap="chooseImage"></view>
+    </view>
+  </view>
 </view>
-<mp-gallery class="gallery" hide-on-click="{{true}}" show-delete="{{showDelete}}" show="{{showPreview}}" binddelete="deletePic" img-urls="{{previewImageUrls}}" current="{{previewCurrent}}"></mp-gallery>
+<mp-gallery
+  class="gallery"
+  hide-on-click="{{true}}"
+  show-delete="{{showDelete}}"
+  show="{{showPreview}}"
+  binddelete="deletePic"
+  img-urls="{{previewImageUrls}}"
+  current="{{previewCurrent}}"
+></mp-gallery>
diff --git a/miniprogram_npm/tdesign-miniprogram/badge/README.en-US.md b/miniprogram_npm/tdesign-miniprogram/badge/README.en-US.md
index f592805..0c39ca6 100644
--- a/miniprogram_npm/tdesign-miniprogram/badge/README.en-US.md
+++ b/miniprogram_npm/tdesign-miniprogram/badge/README.en-US.md
@@ -7,11 +7,30 @@
 -- | -- | -- | -- | --
 color | String | - | \- | N
 content | String | - | \- | N
-count | String / Number / Slot | 0 | \- | N
+count | String / Number / Slot | 0 | [see more ts definition](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N
 dot | Boolean | false | \- | N
 external-classes | Array | - | `['t-class', 't-class-content', 't-class-count']` | N
 max-count | Number | 99 | \- | N
 offset | Array | - | Typescript锛歚Array<string \| number>` | N
-shape | String | circle | options锛歝ircle/round/ribbon/bubble | N
+shape | String | circle | options锛歝ircle/square/bubble/ribbon | N
 show-zero | Boolean | false | \- | N
-size | String | medium | options锛歴mall/medium | N
+size | String | medium | options锛歮edium/large | N
+
+
+### CSS Variables
+The component provides the following CSS variables, which can be used to customize styles.
+Name | Default Value | Description 
+-- | -- | --
+--td-badge-basic-height | 32rpx | - 
+--td-badge-basic-padding | 8rpx | - 
+--td-badge-basic-width | 32rpx | - 
+--td-badge-bg-color | @error-color | - 
+--td-badge-border-radius | 4rpx | - 
+--td-badge-bubble-border-radius | 20rpx 20rpx 20rpx 1px | - 
+--td-badge-dot-size | 16rpx | - 
+--td-badge-font-size | @font-size-xs | - 
+--td-badge-font-weight | 600 | - 
+--td-badge-large-font-size | @font-size-s | - 
+--td-badge-large-height | 40rpx | - 
+--td-badge-large-padding | 10rpx | - 
+--td-badge-text-color | @font-white-1 | - 
diff --git a/miniprogram_npm/tdesign-miniprogram/badge/README.md b/miniprogram_npm/tdesign-miniprogram/badge/README.md
index 7d1bf08..b5d773e 100644
--- a/miniprogram_npm/tdesign-miniprogram/badge/README.md
+++ b/miniprogram_npm/tdesign-miniprogram/badge/README.md
@@ -37,11 +37,35 @@
 -- | -- | -- | -- | --
 color | String | - | 棰滆壊 | N
 content | String | - | 寰芥爣鍐呭锛岀ず渚嬶細`content='鑷畾涔夊唴瀹�'`銆備篃鍙互浣跨敤榛樿鎻掓Ы瀹氫箟 | N
-count | String / Number / Slot | 0 | 寰芥爣鍙充笂瑙掑唴瀹广�傚彲浠ユ槸鏁板瓧锛屼篃鍙互鏄枃瀛椼�傚锛�'new'/3/99+銆傜壒娈婏細鍊间负绌鸿〃绀轰娇鐢ㄦ彃妲芥覆鏌� | N
+count | String / Number / Slot | 0 | 寰芥爣鍙充笂瑙掑唴瀹广�傚彲浠ユ槸鏁板瓧锛屼篃鍙互鏄枃瀛椼�傚锛�'new'/3/99+銆傜壒娈婏細鍊间负绌鸿〃绀轰娇鐢ㄦ彃妲芥覆鏌撱�俒閫氱敤绫诲瀷瀹氫箟](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N
 dot | Boolean | false | 鏄惁涓虹孩鐐� | N
-external-classes | Array | - | 缁勪欢绫诲悕锛屽垎鍒敤浜庤缃灞傚厓绱犮�侀粯璁ゅ唴瀹广�佸彸涓婅鍐呭绛夊厓绱犵被鍚嶃�俙['t-class', 't-class-content', 't-class-count']` | N
 max-count | Number | 99 | 灏侀《鐨勬暟瀛楀�� | N
 offset | Array | - | 璁剧疆鐘舵�佺偣鐨勪綅缃亸绉伙紝绀轰緥锛歔-10, 20] 鎴� ['10em', '8rem']銆俆S 绫诲瀷锛歚Array<string \| number>` | N
-shape | String | circle | 褰㈢姸銆傚彲閫夐」锛歝ircle/round/ribbon/bubble | N
+shape | String | circle | 褰㈢姸銆傚彲閫夐」锛歝ircle/square/bubble/ribbon | N
 show-zero | Boolean | false | 褰撴暟鍊间负 0 鏃讹紝鏄惁灞曠ず寰芥爣 | N
-size | String | medium | 灏哄銆傚彲閫夐」锛歴mall/medium | N
+size | String | medium | 灏哄銆傚彲閫夐」锛歮edium/large | N
+
+### Badge 澶栭儴鏍峰紡绫�
+绫诲悕 | 璇存槑
+-- | -- 
+t-class | 鏍硅妭鐐规牱寮忕被
+t-class-count | 璁℃暟鏍峰紡绫�
+t-class-content | 鍐呭鏍峰紡绫�
+
+### CSS 鍙橀噺
+缁勪欢鎻愪緵浜嗕笅鍒� CSS 鍙橀噺锛屽彲鐢ㄤ簬鑷畾涔夋牱寮忋��
+鍚嶇О | 榛樿鍊� | 鎻忚堪 
+-- | -- | --
+--td-badge-basic-height | 32rpx | - 
+--td-badge-basic-padding | 8rpx | - 
+--td-badge-basic-width | 32rpx | - 
+--td-badge-bg-color | @error-color | - 
+--td-badge-border-radius | 4rpx | - 
+--td-badge-bubble-border-radius | 20rpx 20rpx 20rpx 1px | - 
+--td-badge-dot-size | 16rpx | - 
+--td-badge-font-size | @font-size-xs | - 
+--td-badge-font-weight | 600 | - 
+--td-badge-large-font-size | @font-size-s | - 
+--td-badge-large-height | 40rpx | - 
+--td-badge-large-padding | 10rpx | - 
+--td-badge-text-color | @font-white-1 | - 
diff --git a/miniprogram_npm/tdesign-miniprogram/badge/badge.json b/miniprogram_npm/tdesign-miniprogram/badge/badge.json
index a7a3e7a..4f0a3f0 100644
--- a/miniprogram_npm/tdesign-miniprogram/badge/badge.json
+++ b/miniprogram_npm/tdesign-miniprogram/badge/badge.json
@@ -1,5 +1,5 @@
 {
   "component": true,
+  "styleIsolation": "apply-shared",
   "usingComponents": {}
 }
-
diff --git a/miniprogram_npm/tdesign-miniprogram/badge/badge.wxs b/miniprogram_npm/tdesign-miniprogram/badge/badge.wxs
index 08db60d..b3064d8 100644
--- a/miniprogram_npm/tdesign-miniprogram/badge/badge.wxs
+++ b/miniprogram_npm/tdesign-miniprogram/badge/badge.wxs
@@ -26,7 +26,7 @@
     styleStr += 'background:' + props.color + ';';
   }
   if (props.offset[0]) {
-    styleStr += 'right:' + (hasUnit(props.offset[0].toString()) ? props.offset[0] : props.offset[0] + 'px') + ';';
+    styleStr += 'left: calc(100% + ' + (hasUnit(props.offset[0].toString()) ? props.offset[0] : props.offset[0] + 'px') + ');';
   }
   if (props.offset[1]) {
     styleStr += 'top:' + (hasUnit(props.offset[1].toString()) ? props.offset[1] : props.offset[1] + 'px') + ';';
diff --git a/miniprogram_npm/tdesign-miniprogram/badge/badge.wxss b/miniprogram_npm/tdesign-miniprogram/badge/badge.wxss
index 66de8a0..1b5816c 100644
--- a/miniprogram_npm/tdesign-miniprogram/badge/badge.wxss
+++ b/miniprogram_npm/tdesign-miniprogram/badge/badge.wxss
@@ -81,6 +81,7 @@
 .t-badge--ribbon {
   display: inline-block;
   transform: rotate(45deg);
+  transform-origin: center center;
   border-radius: 0;
 }
 .t-badge--bubble {
@@ -97,12 +98,13 @@
   border-radius: calc(var(--td-badge-large-height, 40rpx) / 2);
 }
 .t-badge__content:not(:empty) + .t-has-count {
-  transform: translate(50%, -50%);
+  transform: translate(-50%, -50%);
   position: absolute;
-  right: 0;
+  left: 100%;
   top: 0;
 }
 .t-badge__content-text {
   display: block;
   line-height: 48rpx;
+  color: var(--td-badge-content-text-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))));
 }
diff --git a/miniprogram_npm/tdesign-miniprogram/badge/type.d.ts b/miniprogram_npm/tdesign-miniprogram/badge/type.d.ts
index 30f00d0..2029271 100644
--- a/miniprogram_npm/tdesign-miniprogram/badge/type.d.ts
+++ b/miniprogram_npm/tdesign-miniprogram/badge/type.d.ts
@@ -11,10 +11,6 @@
         type: null;
         value?: string | number;
     };
-    style?: {
-        type: StringConstructor;
-        value?: string;
-    };
     dot?: {
         type: BooleanConstructor;
         value?: boolean;
@@ -33,7 +29,7 @@
     };
     shape?: {
         type: StringConstructor;
-        value?: 'circle' | 'round' | 'ribbon' | 'bubble';
+        value?: 'circle' | 'square' | 'bubble' | 'ribbon';
     };
     showZero?: {
         type: BooleanConstructor;
@@ -41,6 +37,6 @@
     };
     size?: {
         type: StringConstructor;
-        value?: 'small' | 'medium';
+        value?: 'medium' | 'large';
     };
 }
diff --git a/miniprogram_npm/tdesign-miniprogram/divider/README.en-US.md b/miniprogram_npm/tdesign-miniprogram/divider/README.en-US.md
new file mode 100644
index 0000000..51ac50e
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/divider/README.en-US.md
@@ -0,0 +1,12 @@
+:: BASE_DOC ::
+
+## API
+### Divider Props
+
+name | type | default | description | required
+-- | -- | -- | -- | --
+align | String | center | options锛歭eft/right/center | N
+content | String / Slot | - | \- | N
+dashed | Boolean | false | \- | N
+external-classes | Array | - | `['t-class', 't-class-line', 't-class-content']` | N
+layout | String | horizontal | options锛歨orizontal/vertical | N
diff --git a/miniprogram_npm/tdesign-miniprogram/divider/README.md b/miniprogram_npm/tdesign-miniprogram/divider/README.md
new file mode 100644
index 0000000..a67dece
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/divider/README.md
@@ -0,0 +1,40 @@
+---
+title: Divider 鍒嗗壊绾�
+description: 鐢ㄤ簬鍒嗗壊銆佺粍缁囥�佺粏鍖栨湁涓�瀹氶�昏緫鐨勭粍缁囧厓绱犲唴瀹瑰拰椤甸潰缁撴瀯銆�
+spline: message
+isComponent: true
+---
+
+<span class="coverages-badge" style="margin-right: 10px"><img src="https://img.shields.io/badge/coverages%3A%20lines-100%25-blue" /></span><span class="coverages-badge" style="margin-right: 10px"><img src="https://img.shields.io/badge/coverages%3A%20functions-100%25-blue" /></span><span class="coverages-badge" style="margin-right: 10px"><img src="https://img.shields.io/badge/coverages%3A%20statements-100%25-blue" /></span><span class="coverages-badge" style="margin-right: 10px"><img src="https://img.shields.io/badge/coverages%3A%20branches-100%25-blue" /></span>
+## 寮曞叆
+
+鍏ㄥ眬寮曞叆锛屽湪 miniprogram 鏍圭洰褰曚笅鐨刞app.json`涓厤缃紝灞�閮ㄥ紩鍏ワ紝鍦ㄩ渶瑕佸紩鍏ョ殑椤甸潰鎴栫粍浠剁殑`index.json`涓厤缃��
+
+```json
+"usingComponents": {
+  "t-divider": "tdesign-miniprogram/divider/divider"
+}
+```
+
+## 浠g爜婕旂ず
+
+### 鍩虹鍒嗗壊绗�
+
+鍒嗗壊绗︿富瑕佹槸鐢辩洿绾垮拰鏂囧瓧缁勬垚锛岄�氳繃`slot`浼犲叆鍒嗗壊绾挎枃妗堟垨鑰呭叾浠栬嚜瀹氫箟鍐呭锛岄�氳繃`layout`鎺у埗鍒嗛殧绗︽槸鍨傜洿杩樻槸妯悜
+
+{{ base }}
+
+### 铏氱嚎鏍峰紡
+
+{{ theme }}
+
+## API
+### Divider Props
+
+鍚嶇О | 绫诲瀷 | 榛樿鍊� | 璇存槑 | 蹇呬紶
+-- | -- | -- | -- | --
+align | String | center | 鏂囨湰浣嶇疆锛堜粎鍦ㄦ按骞冲垎鍓茬嚎鏈夋晥锛夈�傚彲閫夐」锛歭eft/right/center | N
+content | String / Slot | - | 瀛愬厓绱� | N
+dashed | Boolean | false | 鏄惁铏氱嚎锛堜粎鍦ㄦ按骞冲垎鍓茬嚎鏈夋晥锛� | N
+external-classes | Array | - | 缁勪欢绫诲悕锛屽垎鍒敤浜庤缃� 缁勪欢澶栧眰绫诲悕銆佸垎闅旂嚎绫诲悕 绛夈�俙['t-class', 't-class-line', 't-class-content']` | N
+layout | String | horizontal | 鍒嗛殧绾跨被鍨嬫湁涓ょ锛氭按骞冲拰鍨傜洿銆傚彲閫夐」锛歨orizontal/vertical | N
diff --git a/miniprogram_npm/tdesign-miniprogram/divider/divider.d.ts b/miniprogram_npm/tdesign-miniprogram/divider/divider.d.ts
new file mode 100644
index 0000000..d7b8209
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/divider/divider.d.ts
@@ -0,0 +1,19 @@
+import { SuperComponent } from '../common/src/index';
+export default class Divider extends SuperComponent {
+    externalClasses: string[];
+    options: {
+        addGlobalClass: boolean;
+        multipleSlots: boolean;
+    };
+    properties: import("./type").TdDividerProps;
+    data: {
+        prefix: string;
+        classPrefix: string;
+    };
+    observers: {
+        lineColor(): void;
+    };
+    methods: {
+        setStyle(): void;
+    };
+}
diff --git a/miniprogram_npm/tdesign-miniprogram/divider/divider.js b/miniprogram_npm/tdesign-miniprogram/divider/divider.js
new file mode 100644
index 0000000..bedaafb
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/divider/divider.js
@@ -0,0 +1,44 @@
+var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
+    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
+    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
+    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
+    return c > 3 && r && Object.defineProperty(target, key, r), r;
+};
+import { SuperComponent, wxComponent } from '../common/src/index';
+import config from '../common/config';
+import props from './props';
+const { prefix } = config;
+const name = `${prefix}-divider`;
+let Divider = class Divider extends SuperComponent {
+    constructor() {
+        super(...arguments);
+        this.externalClasses = [`${prefix}-class`, `${prefix}-class-content`];
+        this.options = {
+            addGlobalClass: true,
+            multipleSlots: true,
+        };
+        this.properties = props;
+        this.data = {
+            prefix,
+            classPrefix: name,
+        };
+        this.observers = {
+            lineColor() {
+                this.setStyle();
+            },
+        };
+        this.methods = {
+            setStyle() {
+                const { lineColor } = this.properties;
+                const dividerStyle = `${lineColor ? `border-color: ${lineColor};` : ''}`;
+                this.setData({
+                    dividerStyle,
+                });
+            },
+        };
+    }
+};
+Divider = __decorate([
+    wxComponent()
+], Divider);
+export default Divider;
diff --git a/miniprogram_npm/tdesign-miniprogram/divider/divider.json b/miniprogram_npm/tdesign-miniprogram/divider/divider.json
new file mode 100644
index 0000000..467ce29
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/divider/divider.json
@@ -0,0 +1,3 @@
+{
+  "component": true
+}
diff --git a/miniprogram_npm/tdesign-miniprogram/divider/divider.wxml b/miniprogram_npm/tdesign-miniprogram/divider/divider.wxml
new file mode 100644
index 0000000..5f1fa88
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/divider/divider.wxml
@@ -0,0 +1,13 @@
+<wxs src="../common/utils.wxs" module="_" />
+
+<view class="class {{prefix}}-class {{layout==='vertical'? classPrefix + '--vertical-center' : ''}}">
+  <view
+    class="{{classPrefix}} {{classPrefix}}--{{layout}} {{classPrefix}}--{{align}} {{dashed? classPrefix + '--dashed' : ''}} "
+    style="{{_._style([dividerStyle, style, customStyle])}}"
+  >
+    <view class="{{prefix}}-class-content {{classPrefix}}__content">
+      <view wx:if="{{content}}"> {{content}} </view>
+      <slot wx:else name="content" />
+    </view>
+  </view>
+</view>
diff --git a/miniprogram_npm/tdesign-miniprogram/divider/divider.wxss b/miniprogram_npm/tdesign-miniprogram/divider/divider.wxss
new file mode 100644
index 0000000..1310ee4
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/divider/divider.wxss
@@ -0,0 +1,83 @@
+.t-float-left {
+  float: left;
+}
+.t-float-right {
+  float: right;
+}
+@keyframes tdesign-fade-out {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+  }
+}
+.hotspot-expanded.relative {
+  position: relative;
+}
+.hotspot-expanded::after {
+  content: '';
+  display: block;
+  position: absolute;
+  left: 0;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  transform: scale(1.5);
+}
+.t-divider {
+  display: flex;
+  color: var(--td-divider-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)));
+  border-color: var(--td-divider-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)));
+  border-style: var(--td-divider-content-line-style, solid);
+  border-width: 0;
+}
+.t-divider::before,
+.t-divider::after {
+  content: '';
+  display: block;
+  flex: 1;
+  box-sizing: border-box;
+  border: inherit;
+  border-color: inherit;
+  border-style: inherit;
+}
+.t-divider--horizontal {
+  align-items: center;
+  margin-top: 20rpx;
+  margin-bottom: 20rpx;
+}
+.t-divider--horizontal::before,
+.t-divider--horizontal::after {
+  border-top-width: 1px;
+  transform: scaleY(0.5);
+}
+.t-divider--horizontal .t-divider__content:not(:empty) {
+  margin: 0 24rpx;
+}
+.t-divider--vertical {
+  flex-direction: column;
+  height: 1em;
+  margin: 0 16rpx;
+}
+.t-divider--vertical::before,
+.t-divider--vertical::after {
+  border-left-width: 1px;
+  transform: scaleX(0.5);
+}
+.t-divider--vertical-center {
+  align-items: center;
+  height: 100%;
+}
+.t-divider--dashed {
+  border-style: dashed;
+}
+.t-divider__content {
+  font-size: var(--td-divider-content-font-size, 24rpx);
+  line-height: var(--td-divider-content-line-height, 40rpx);
+  color: var(--td-divider-content-color, var(--td-font-gray-3, rgba(0, 0, 0, 0.4)));
+}
+.t-divider--left::before,
+.t-divider--right::after {
+  max-width: 60rpx;
+}
diff --git a/miniprogram_npm/tdesign-miniprogram/divider/props.d.ts b/miniprogram_npm/tdesign-miniprogram/divider/props.d.ts
new file mode 100644
index 0000000..806aab2
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/divider/props.d.ts
@@ -0,0 +1,3 @@
+import { TdDividerProps } from './type';
+declare const props: TdDividerProps;
+export default props;
diff --git a/miniprogram_npm/tdesign-miniprogram/divider/props.js b/miniprogram_npm/tdesign-miniprogram/divider/props.js
new file mode 100644
index 0000000..e8d8a73
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/divider/props.js
@@ -0,0 +1,25 @@
+const props = {
+    align: {
+        type: String,
+        value: 'center',
+    },
+    content: {
+        type: String,
+    },
+    style: {
+        type: String,
+        value: '',
+    },
+    dashed: {
+        type: Boolean,
+        value: false,
+    },
+    externalClasses: {
+        type: Array,
+    },
+    layout: {
+        type: String,
+        value: 'horizontal',
+    },
+};
+export default props;
diff --git a/miniprogram_npm/tdesign-miniprogram/divider/type.d.ts b/miniprogram_npm/tdesign-miniprogram/divider/type.d.ts
new file mode 100644
index 0000000..faed054
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/divider/type.d.ts
@@ -0,0 +1,26 @@
+export interface TdDividerProps {
+    align?: {
+        type: StringConstructor;
+        value?: 'left' | 'right' | 'center';
+    };
+    content?: {
+        type: StringConstructor;
+        value?: string;
+    };
+    style?: {
+        type: StringConstructor;
+        value?: string;
+    };
+    dashed?: {
+        type: BooleanConstructor;
+        value?: boolean;
+    };
+    externalClasses?: {
+        type: ArrayConstructor;
+        value?: ['t-class', 't-class-line', 't-class-content'];
+    };
+    layout?: {
+        type: StringConstructor;
+        value?: 'horizontal' | 'vertical';
+    };
+}
diff --git a/miniprogram_npm/tdesign-miniprogram/divider/type.js b/miniprogram_npm/tdesign-miniprogram/divider/type.js
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/divider/type.js
@@ -0,0 +1 @@
+export {};
diff --git a/miniprogram_npm/tdesign-miniprogram/icon/README.md b/miniprogram_npm/tdesign-miniprogram/icon/README.md
index 1a77bf7..99b8542 100644
--- a/miniprogram_npm/tdesign-miniprogram/icon/README.md
+++ b/miniprogram_npm/tdesign-miniprogram/icon/README.md
@@ -21,7 +21,7 @@
 
 <details>
   <summary>
-    鎺у埗鍙板憡璀︼細Faild to load font
+    鎺у埗鍙板憡璀︼細Failed to load font
     <span class="icon">馃憞</span>
   </summary>
   <p style="margin-top: 10px; color: rgba(0, 0, 0, .6)">
diff --git a/miniprogram_npm/tdesign-miniprogram/icon/icon.json b/miniprogram_npm/tdesign-miniprogram/icon/icon.json
index a89ef4d..4f0a3f0 100644
--- a/miniprogram_npm/tdesign-miniprogram/icon/icon.json
+++ b/miniprogram_npm/tdesign-miniprogram/icon/icon.json
@@ -1,4 +1,5 @@
 {
   "component": true,
+  "styleIsolation": "apply-shared",
   "usingComponents": {}
 }
diff --git a/miniprogram_npm/tdesign-miniprogram/icon/icon.wxss b/miniprogram_npm/tdesign-miniprogram/icon/icon.wxss
index 9b6c865..49e0276 100644
--- a/miniprogram_npm/tdesign-miniprogram/icon/icon.wxss
+++ b/miniprogram_npm/tdesign-miniprogram/icon/icon.wxss
@@ -27,14 +27,14 @@
 }
 @font-face {
   font-family: t;
-  src: url('https://tdesign.gtimg.com/icon/0.1.2/fonts/t.eot'), url('https://tdesign.gtimg.com/icon/0.1.2/fonts/t.eot?#iefix') format('ded-opentype'), url('https://tdesign.gtimg.com/icon/0.1.2/fonts/t.woff') format('woff'), url('https://tdesign.gtimg.com/icon/0.1.2/fonts/t.ttf') format('truetype'), url('https://tdesign.gtimg.com/icon/0.1.2/fonts/t.svg') format('svg');
+  src: url('https://tdesign.gtimg.com/icon/0.2.0/fonts/t.eot'), url('https://tdesign.gtimg.com/icon/0.2.0/fonts/t.eot?#iefix') format('ded-opentype'), url('https://tdesign.gtimg.com/icon/0.2.0/fonts/t.woff') format('woff'), url('https://tdesign.gtimg.com/icon/0.2.0/fonts/t.ttf') format('truetype'), url('https://tdesign.gtimg.com/icon/0.2.0/fonts/t.svg') format('svg');
   /* iOS 4.1- */
   font-weight: normal;
   font-style: normal;
 }
 .t-icon--image {
-  width: 1em;
-  height: 1em;
+  width: 100%;
+  height: 100%;
 }
 .t-icon__image {
   vertical-align: top;
@@ -57,714 +57,3612 @@
   font-family: t !important;
   /* prevent issues with browser extensions that change fonts */
 }
-.t-icon-add-circle:before {
+.t-icon-activity:before {
   content: '\E001';
 }
-.t-icon-add-rectangle:before {
+.t-icon-add-and-subtract:before {
   content: '\E002';
 }
-.t-icon-add:before {
+.t-icon-add-circle:before {
   content: '\E003';
 }
-.t-icon-app:before {
+.t-icon-add-rectangle:before {
   content: '\E004';
 }
-.t-icon-arrow-down-rectangle:before {
+.t-icon-add:before {
   content: '\E005';
 }
-.t-icon-arrow-down:before {
+.t-icon-address-book:before {
   content: '\E006';
 }
-.t-icon-arrow-left:before {
+.t-icon-adjustment:before {
   content: '\E007';
 }
-.t-icon-arrow-right:before {
+.t-icon-airplay-wave:before {
   content: '\E008';
 }
-.t-icon-arrow-up:before {
+.t-icon-alarm-add:before {
   content: '\E009';
 }
-.t-icon-attach:before {
+.t-icon-alarm-off:before {
   content: '\E00A';
 }
-.t-icon-backtop-rectangle:before {
+.t-icon-alarm:before {
   content: '\E00B';
 }
-.t-icon-backtop:before {
+.t-icon-align-top:before {
   content: '\E00C';
 }
-.t-icon-backward:before {
+.t-icon-align-vertical:before {
   content: '\E00D';
 }
-.t-icon-barcode:before {
+.t-icon-alpha:before {
   content: '\E00E';
 }
-.t-icon-books:before {
+.t-icon-analytics:before {
   content: '\E00F';
 }
-.t-icon-browse-off:before {
+.t-icon-anchor:before {
   content: '\E010';
 }
-.t-icon-browse:before {
+.t-icon-angry:before {
   content: '\E011';
 }
-.t-icon-bulletpoint:before {
+.t-icon-animation-1:before {
   content: '\E012';
 }
-.t-icon-calendar:before {
+.t-icon-animation:before {
   content: '\E013';
 }
-.t-icon-call:before {
+.t-icon-anticlockwise:before {
   content: '\E014';
 }
-.t-icon-caret-down-small:before {
+.t-icon-api:before {
   content: '\E015';
 }
-.t-icon-caret-down:before {
+.t-icon-app:before {
   content: '\E016';
 }
-.t-icon-caret-left-small:before {
+.t-icon-apple:before {
   content: '\E017';
 }
-.t-icon-caret-left:before {
+.t-icon-application:before {
   content: '\E018';
 }
-.t-icon-caret-right-small:before {
+.t-icon-architecture-hui-style:before {
   content: '\E019';
 }
-.t-icon-caret-right:before {
+.t-icon-archway-1:before {
   content: '\E01A';
 }
-.t-icon-caret-up-small:before {
+.t-icon-archway:before {
   content: '\E01B';
 }
-.t-icon-caret-up:before {
+.t-icon-arrow-down-circle:before {
   content: '\E01C';
 }
-.t-icon-cart:before {
+.t-icon-arrow-down-rectangle:before {
   content: '\E01D';
 }
-.t-icon-chart-bar:before {
+.t-icon-arrow-down:before {
   content: '\E01E';
 }
-.t-icon-chart-bubble:before {
+.t-icon-arrow-left-circle:before {
   content: '\E01F';
 }
-.t-icon-chart-pie:before {
+.t-icon-arrow-left-down-circle:before {
   content: '\E020';
 }
-.t-icon-chart:before {
+.t-icon-arrow-left-down:before {
   content: '\E021';
 }
-.t-icon-chat:before {
+.t-icon-arrow-left-right-1:before {
   content: '\E022';
 }
-.t-icon-check-circle-filled:before {
+.t-icon-arrow-left-right-2:before {
   content: '\E023';
 }
-.t-icon-check-circle:before {
+.t-icon-arrow-left-right-3:before {
   content: '\E024';
 }
-.t-icon-check-rectangle-filled:before {
+.t-icon-arrow-left-right-circle:before {
   content: '\E025';
 }
-.t-icon-check-rectangle:before {
+.t-icon-arrow-left-up-circle:before {
   content: '\E026';
 }
-.t-icon-check:before {
+.t-icon-arrow-left-up:before {
   content: '\E027';
 }
-.t-icon-chevron-down-circle:before {
+.t-icon-arrow-left:before {
   content: '\E028';
 }
-.t-icon-chevron-down-rectangle:before {
+.t-icon-arrow-right-circle:before {
   content: '\E029';
 }
-.t-icon-chevron-down:before {
+.t-icon-arrow-right-down-circle:before {
   content: '\E02A';
 }
-.t-icon-chevron-left-circle:before {
+.t-icon-arrow-right-down:before {
   content: '\E02B';
 }
-.t-icon-chevron-left-double:before {
+.t-icon-arrow-right-up-circle:before {
   content: '\E02C';
 }
-.t-icon-chevron-left-rectangle:before {
+.t-icon-arrow-right-up:before {
   content: '\E02D';
 }
-.t-icon-chevron-left:before {
+.t-icon-arrow-right:before {
   content: '\E02E';
 }
-.t-icon-chevron-right-circle:before {
+.t-icon-arrow-triangle-down-filled:before {
   content: '\E02F';
 }
-.t-icon-chevron-right-double:before {
+.t-icon-arrow-triangle-down:before {
   content: '\E030';
 }
-.t-icon-chevron-right-rectangle:before {
+.t-icon-arrow-triangle-up-filled:before {
   content: '\E031';
 }
-.t-icon-chevron-right:before {
+.t-icon-arrow-triangle-up:before {
   content: '\E032';
 }
-.t-icon-chevron-up-circle:before {
+.t-icon-arrow-up-circle:before {
   content: '\E033';
 }
-.t-icon-chevron-up-rectangle:before {
+.t-icon-arrow-up-down-1:before {
   content: '\E034';
 }
-.t-icon-chevron-up:before {
+.t-icon-arrow-up-down-2:before {
   content: '\E035';
 }
-.t-icon-circle:before {
+.t-icon-arrow-up-down-3:before {
   content: '\E036';
 }
-.t-icon-clear:before {
+.t-icon-arrow-up-down-circle:before {
   content: '\E037';
 }
-.t-icon-close-circle-filled:before {
+.t-icon-arrow-up:before {
   content: '\E038';
 }
-.t-icon-close-circle:before {
+.t-icon-artboard:before {
   content: '\E039';
 }
-.t-icon-close-rectangle:before {
+.t-icon-article:before {
   content: '\E03A';
 }
-.t-icon-close:before {
+.t-icon-assignment-checked:before {
   content: '\E03B';
 }
-.t-icon-cloud-download:before {
+.t-icon-assignment-code:before {
   content: '\E03C';
 }
-.t-icon-cloud-upload:before {
+.t-icon-assignment-error:before {
   content: '\E03D';
 }
-.t-icon-cloud:before {
+.t-icon-assignment-user:before {
   content: '\E03E';
 }
-.t-icon-code:before {
+.t-icon-assignment:before {
   content: '\E03F';
 }
-.t-icon-control-platform:before {
+.t-icon-attach:before {
   content: '\E040';
 }
-.t-icon-creditcard:before {
+.t-icon-attic-1:before {
   content: '\E041';
 }
-.t-icon-dashboard:before {
+.t-icon-attic:before {
   content: '\E042';
 }
-.t-icon-delete:before {
+.t-icon-audio:before {
   content: '\E043';
 }
-.t-icon-desktop:before {
+.t-icon-awkward:before {
   content: '\E044';
 }
-.t-icon-discount-filled:before {
+.t-icon-backtop-rectangle:before {
   content: '\E045';
 }
-.t-icon-discount:before {
+.t-icon-backtop:before {
   content: '\E046';
 }
-.t-icon-download:before {
+.t-icon-backup:before {
   content: '\E047';
 }
-.t-icon-edit-1:before {
+.t-icon-backward:before {
   content: '\E048';
 }
-.t-icon-edit:before {
+.t-icon-bad-laugh:before {
   content: '\E049';
 }
-.t-icon-ellipsis:before {
+.t-icon-bamboo-shoot:before {
   content: '\E04A';
 }
-.t-icon-enter:before {
+.t-icon-banana:before {
   content: '\E04B';
 }
-.t-icon-error-circle-filled:before {
+.t-icon-barbecue:before {
   content: '\E04C';
 }
-.t-icon-error-circle:before {
+.t-icon-barcode-1:before {
   content: '\E04D';
 }
-.t-icon-error:before {
+.t-icon-barcode:before {
   content: '\E04E';
 }
-.t-icon-file-add:before {
+.t-icon-base-station:before {
   content: '\E04F';
 }
-.t-icon-file-copy:before {
+.t-icon-battery-add:before {
   content: '\E050';
 }
-.t-icon-file-excel:before {
+.t-icon-battery-charging:before {
   content: '\E051';
 }
-.t-icon-file-icon:before {
+.t-icon-battery-low:before {
   content: '\E052';
 }
-.t-icon-file-image:before {
+.t-icon-battery:before {
   content: '\E053';
 }
-.t-icon-file-paste:before {
+.t-icon-bean:before {
   content: '\E054';
 }
-.t-icon-file-pdf:before {
+.t-icon-beer:before {
   content: '\E055';
 }
-.t-icon-file-powerpoint:before {
+.t-icon-beta:before {
   content: '\E056';
 }
-.t-icon-file-unknown:before {
+.t-icon-bifurcate:before {
   content: '\E057';
 }
-.t-icon-file-word:before {
+.t-icon-bill:before {
   content: '\E058';
 }
-.t-icon-file:before {
+.t-icon-blockchain:before {
   content: '\E059';
 }
-.t-icon-filter-clear:before {
+.t-icon-bluetooth:before {
   content: '\E05A';
 }
-.t-icon-filter:before {
+.t-icon-bone:before {
   content: '\E05B';
 }
-.t-icon-flag:before {
+.t-icon-book-open:before {
   content: '\E05C';
 }
-.t-icon-folder-add:before {
+.t-icon-book:before {
   content: '\E05D';
 }
-.t-icon-folder-open:before {
+.t-icon-bookmark-add:before {
   content: '\E05E';
 }
-.t-icon-folder:before {
+.t-icon-bookmark-checked:before {
   content: '\E05F';
 }
-.t-icon-fork:before {
+.t-icon-bookmark-double:before {
   content: '\E060';
 }
-.t-icon-format-horizontal-align-bottom:before {
+.t-icon-bookmark-minus:before {
   content: '\E061';
 }
-.t-icon-format-horizontal-align-center:before {
+.t-icon-bookmark:before {
   content: '\E062';
 }
-.t-icon-format-horizontal-align-top:before {
+.t-icon-braces:before {
   content: '\E063';
 }
-.t-icon-format-vertical-align-center:before {
+.t-icon-brackets:before {
   content: '\E064';
 }
-.t-icon-format-vertical-align-left:before {
+.t-icon-bread:before {
   content: '\E065';
 }
-.t-icon-format-vertical-align-right:before {
+.t-icon-bridge-1:before {
   content: '\E066';
 }
-.t-icon-forward:before {
+.t-icon-bridge-2:before {
   content: '\E067';
 }
-.t-icon-fullscreen-exit:before {
+.t-icon-bridge-3:before {
   content: '\E068';
 }
-.t-icon-fullscreen:before {
+.t-icon-bridge-4:before {
   content: '\E069';
 }
-.t-icon-gender-female:before {
+.t-icon-bridge-5:before {
   content: '\E06A';
 }
-.t-icon-gender-male:before {
+.t-icon-bridge-6:before {
   content: '\E06B';
 }
-.t-icon-gift:before {
+.t-icon-bridge:before {
   content: '\E06C';
 }
-.t-icon-heart-filled:before {
+.t-icon-brightness-1:before {
   content: '\E06D';
 }
-.t-icon-heart:before {
+.t-icon-brightness:before {
   content: '\E06E';
 }
-.t-icon-help-circle-filled:before {
+.t-icon-broccoli:before {
   content: '\E06F';
 }
-.t-icon-help-circle:before {
+.t-icon-browse-gallery:before {
   content: '\E070';
 }
-.t-icon-help:before {
+.t-icon-browse-off:before {
   content: '\E071';
 }
-.t-icon-history:before {
+.t-icon-browse:before {
   content: '\E072';
 }
-.t-icon-home:before {
+.t-icon-brush:before {
   content: '\E073';
 }
-.t-icon-hourglass:before {
+.t-icon-bug-report:before {
   content: '\E074';
 }
-.t-icon-image-error:before {
+.t-icon-bug:before {
   content: '\E075';
 }
-.t-icon-image:before {
+.t-icon-building-1:before {
   content: '\E076';
 }
-.t-icon-info-circle-filled:before {
+.t-icon-building-2:before {
   content: '\E077';
 }
-.t-icon-info-circle:before {
+.t-icon-building-3:before {
   content: '\E078';
 }
-.t-icon-internet:before {
+.t-icon-building-4:before {
   content: '\E079';
 }
-.t-icon-jump:before {
+.t-icon-building-5:before {
   content: '\E07A';
 }
-.t-icon-laptop:before {
+.t-icon-building:before {
   content: '\E07B';
 }
-.t-icon-layers:before {
+.t-icon-bulletpoint:before {
   content: '\E07C';
 }
-.t-icon-link-unlink:before {
+.t-icon-button:before {
   content: '\E07D';
 }
-.t-icon-link:before {
+.t-icon-cabbage:before {
   content: '\E07E';
 }
-.t-icon-loading:before {
+.t-icon-cake:before {
   content: '\E07F';
 }
-.t-icon-location:before {
+.t-icon-calculation-1:before {
   content: '\E080';
 }
-.t-icon-lock-off:before {
+.t-icon-calculation:before {
   content: '\E081';
 }
-.t-icon-lock-on:before {
+.t-icon-calculator-1:before {
   content: '\E082';
 }
-.t-icon-login:before {
+.t-icon-calculator:before {
   content: '\E083';
 }
-.t-icon-logo-android:before {
+.t-icon-calendar-1:before {
   content: '\E084';
 }
-.t-icon-logo-apple-filled:before {
+.t-icon-calendar-2:before {
   content: '\E085';
 }
-.t-icon-logo-apple:before {
+.t-icon-calendar-edit:before {
   content: '\E086';
 }
-.t-icon-logo-chrome-filled:before {
+.t-icon-calendar-event:before {
   content: '\E087';
 }
-.t-icon-logo-chrome:before {
+.t-icon-calendar:before {
   content: '\E088';
 }
-.t-icon-logo-codepen:before {
+.t-icon-call-1:before {
   content: '\E089';
 }
-.t-icon-logo-github-filled:before {
+.t-icon-call-cancel:before {
   content: '\E08A';
 }
-.t-icon-logo-github:before {
+.t-icon-call-forwarded:before {
   content: '\E08B';
 }
-.t-icon-logo-ie-filled:before {
+.t-icon-call-incoming:before {
   content: '\E08C';
 }
-.t-icon-logo-ie:before {
+.t-icon-call-off:before {
   content: '\E08D';
 }
-.t-icon-logo-qq:before {
+.t-icon-call:before {
   content: '\E08E';
 }
-.t-icon-logo-wechat:before {
+.t-icon-calm-1:before {
   content: '\E08F';
 }
-.t-icon-logo-wecom:before {
+.t-icon-calm:before {
   content: '\E090';
 }
-.t-icon-logo-windows-filled:before {
+.t-icon-camera-1:before {
   content: '\E091';
 }
-.t-icon-logo-windows:before {
+.t-icon-camera-2:before {
   content: '\E092';
 }
-.t-icon-logout:before {
+.t-icon-camera-off:before {
   content: '\E093';
 }
-.t-icon-mail:before {
+.t-icon-camera:before {
   content: '\E094';
 }
-.t-icon-menu-fold:before {
+.t-icon-candy:before {
   content: '\E095';
 }
-.t-icon-menu-unfold:before {
+.t-icon-card:before {
   content: '\E096';
 }
-.t-icon-minus-circle-filled:before {
+.t-icon-cardmembership:before {
   content: '\E097';
 }
-.t-icon-minus-circle:before {
+.t-icon-caret-down-small:before {
   content: '\E098';
 }
-.t-icon-minus-rectangle:before {
+.t-icon-caret-down:before {
   content: '\E099';
 }
-.t-icon-mirror:before {
+.t-icon-caret-left-small:before {
   content: '\E09A';
 }
-.t-icon-mobile-vibrate:before {
+.t-icon-caret-left:before {
   content: '\E09B';
 }
-.t-icon-mobile:before {
+.t-icon-caret-right-small:before {
   content: '\E09C';
 }
-.t-icon-money-circle:before {
+.t-icon-caret-right:before {
   content: '\E09D';
 }
-.t-icon-more:before {
+.t-icon-caret-up-small:before {
   content: '\E09E';
 }
-.t-icon-move:before {
+.t-icon-caret-up:before {
   content: '\E09F';
 }
-.t-icon-next:before {
+.t-icon-cart-add:before {
   content: '\E0A0';
 }
-.t-icon-notification-filled:before {
+.t-icon-cart:before {
   content: '\E0A1';
 }
-.t-icon-notification:before {
+.t-icon-cast:before {
   content: '\E0A2';
 }
-.t-icon-order-adjustment-column:before {
+.t-icon-castle-1:before {
   content: '\E0A3';
 }
-.t-icon-order-ascending:before {
+.t-icon-castle-2:before {
   content: '\E0A4';
 }
-.t-icon-order-descending:before {
+.t-icon-castle-3:before {
   content: '\E0A5';
 }
-.t-icon-page-first:before {
+.t-icon-castle-4:before {
   content: '\E0A6';
 }
-.t-icon-page-last:before {
+.t-icon-castle-5:before {
   content: '\E0A7';
 }
-.t-icon-pause-circle-filled:before {
+.t-icon-castle-6:before {
   content: '\E0A8';
 }
-.t-icon-photo:before {
+.t-icon-castle-7:before {
   content: '\E0A9';
 }
-.t-icon-pin-filled:before {
+.t-icon-castle:before {
   content: '\E0AA';
 }
-.t-icon-pin:before {
+.t-icon-cat:before {
   content: '\E0AB';
 }
-.t-icon-play-circle-filled:before {
+.t-icon-catalog:before {
   content: '\E0AC';
 }
-.t-icon-play-circle-stroke:before {
+.t-icon-cd:before {
   content: '\E0AD';
 }
-.t-icon-play-circle:before {
+.t-icon-celsius:before {
   content: '\E0AE';
 }
-.t-icon-play:before {
+.t-icon-center-focus-strong:before {
   content: '\E0AF';
 }
-.t-icon-poweroff:before {
+.t-icon-centimeter:before {
   content: '\E0B0';
 }
-.t-icon-precise-monitor:before {
+.t-icon-certificate-1:before {
   content: '\E0B1';
 }
-.t-icon-previous:before {
+.t-icon-certificate:before {
   content: '\E0B2';
 }
-.t-icon-print:before {
+.t-icon-chart-3d:before {
   content: '\E0B3';
 }
-.t-icon-qrcode:before {
+.t-icon-chart-add:before {
   content: '\E0B4';
 }
-.t-icon-queue:before {
+.t-icon-chart-analytics:before {
   content: '\E0B5';
 }
-.t-icon-rectangle:before {
+.t-icon-chart-area-multi:before {
   content: '\E0B6';
 }
-.t-icon-refresh:before {
+.t-icon-chart-area:before {
   content: '\E0B7';
 }
-.t-icon-relativity:before {
+.t-icon-chart-bar:before {
   content: '\E0B8';
 }
-.t-icon-remove:before {
+.t-icon-chart-bubble:before {
   content: '\E0B9';
 }
-.t-icon-rollback:before {
+.t-icon-chart-colum:before {
   content: '\E0BA';
 }
-.t-icon-rollfront:before {
+.t-icon-chart-combo:before {
   content: '\E0BB';
 }
-.t-icon-root-list:before {
+.t-icon-chart-line-data-1:before {
   content: '\E0BC';
 }
-.t-icon-rotation:before {
+.t-icon-chart-line-data:before {
   content: '\E0BD';
 }
-.t-icon-round:before {
+.t-icon-chart-line-multi:before {
   content: '\E0BE';
 }
-.t-icon-save:before {
+.t-icon-chart-line:before {
   content: '\E0BF';
 }
-.t-icon-scan:before {
+.t-icon-chart-maximum:before {
   content: '\E0C0';
 }
-.t-icon-search:before {
+.t-icon-chart-median:before {
   content: '\E0C1';
 }
-.t-icon-secured:before {
+.t-icon-chart-minimum:before {
   content: '\E0C2';
 }
-.t-icon-server:before {
+.t-icon-chart-pie:before {
   content: '\E0C3';
 }
-.t-icon-service:before {
+.t-icon-chart-radar:before {
   content: '\E0C4';
 }
-.t-icon-setting:before {
+.t-icon-chart-radial:before {
   content: '\E0C5';
 }
-.t-icon-share:before {
+.t-icon-chart-ring-1:before {
   content: '\E0C6';
 }
-.t-icon-shop:before {
+.t-icon-chart-ring:before {
   content: '\E0C7';
 }
-.t-icon-slash:before {
+.t-icon-chart-scatter:before {
   content: '\E0C8';
 }
-.t-icon-sound:before {
+.t-icon-chart-stacked:before {
   content: '\E0C9';
 }
-.t-icon-star-filled:before {
+.t-icon-chart:before {
   content: '\E0CA';
 }
-.t-icon-star:before {
+.t-icon-chat-add:before {
   content: '\E0CB';
 }
-.t-icon-stop-circle-1:before {
+.t-icon-chat-bubble-1:before {
   content: '\E0CC';
 }
-.t-icon-stop-circle-filled:before {
+.t-icon-chat-bubble-add:before {
   content: '\E0CD';
 }
-.t-icon-stop-circle:before {
+.t-icon-chat-bubble-error:before {
   content: '\E0CE';
 }
-.t-icon-stop:before {
+.t-icon-chat-bubble-help:before {
   content: '\E0CF';
 }
-.t-icon-swap-left:before {
+.t-icon-chat-bubble-history:before {
   content: '\E0D0';
 }
-.t-icon-swap-right:before {
+.t-icon-chat-bubble-locked:before {
   content: '\E0D1';
 }
-.t-icon-swap:before {
+.t-icon-chat-bubble-smile:before {
   content: '\E0D2';
 }
-.t-icon-thumb-down:before {
+.t-icon-chat-bubble:before {
   content: '\E0D3';
 }
-.t-icon-thumb-up:before {
+.t-icon-chat-checked:before {
   content: '\E0D4';
 }
-.t-icon-time-filled:before {
+.t-icon-chat-clear:before {
   content: '\E0D5';
 }
-.t-icon-time:before {
+.t-icon-chat-double:before {
   content: '\E0D6';
 }
-.t-icon-tips:before {
+.t-icon-chat-error:before {
   content: '\E0D7';
 }
-.t-icon-tools:before {
+.t-icon-chat-heart:before {
   content: '\E0D8';
 }
-.t-icon-unfold-less:before {
+.t-icon-chat-message:before {
   content: '\E0D9';
 }
-.t-icon-unfold-more:before {
+.t-icon-chat-off:before {
   content: '\E0DA';
 }
-.t-icon-upload:before {
+.t-icon-chat-poll:before {
   content: '\E0DB';
 }
-.t-icon-usb:before {
+.t-icon-chat-setting:before {
   content: '\E0DC';
 }
-.t-icon-user-add:before {
+.t-icon-chat:before {
   content: '\E0DD';
 }
-.t-icon-user-avatar:before {
+.t-icon-check-circle-filled:before {
   content: '\E0DE';
 }
-.t-icon-user-circle:before {
+.t-icon-check-circle:before {
   content: '\E0DF';
 }
-.t-icon-user-clear:before {
+.t-icon-check-double:before {
   content: '\E0E0';
 }
-.t-icon-user-talk:before {
+.t-icon-check-rectangle-filled:before {
   content: '\E0E1';
 }
-.t-icon-user:before {
+.t-icon-check-rectangle:before {
   content: '\E0E2';
 }
-.t-icon-usergroup-add:before {
+.t-icon-check:before {
   content: '\E0E3';
 }
-.t-icon-usergroup-clear:before {
+.t-icon-cheese:before {
   content: '\E0E4';
 }
-.t-icon-usergroup:before {
+.t-icon-cherry:before {
   content: '\E0E5';
 }
-.t-icon-video:before {
+.t-icon-chevron-down-circle:before {
   content: '\E0E6';
 }
-.t-icon-view-column:before {
+.t-icon-chevron-down-double-s:before {
   content: '\E0E7';
 }
-.t-icon-view-list:before {
+.t-icon-chevron-down-double:before {
   content: '\E0E8';
 }
-.t-icon-view-module:before {
+.t-icon-chevron-down-rectangle:before {
   content: '\E0E9';
 }
-.t-icon-wallet:before {
+.t-icon-chevron-down-s:before {
   content: '\E0EA';
 }
-.t-icon-wifi:before {
+.t-icon-chevron-down:before {
   content: '\E0EB';
 }
-.t-icon-zoom-in:before {
+.t-icon-chevron-left-circle:before {
   content: '\E0EC';
 }
-.t-icon-zoom-out:before {
+.t-icon-chevron-left-double-s:before {
   content: '\E0ED';
 }
+.t-icon-chevron-left-double:before {
+  content: '\E0EE';
+}
+.t-icon-chevron-left-rectangle:before {
+  content: '\E0EF';
+}
+.t-icon-chevron-left-s:before {
+  content: '\E0F0';
+}
+.t-icon-chevron-left:before {
+  content: '\E0F1';
+}
+.t-icon-chevron-right-circle:before {
+  content: '\E0F2';
+}
+.t-icon-chevron-right-double-s:before {
+  content: '\E0F3';
+}
+.t-icon-chevron-right-double:before {
+  content: '\E0F4';
+}
+.t-icon-chevron-right-rectangle:before {
+  content: '\E0F5';
+}
+.t-icon-chevron-right-s:before {
+  content: '\E0F6';
+}
+.t-icon-chevron-right:before {
+  content: '\E0F7';
+}
+.t-icon-chevron-up-circle:before {
+  content: '\E0F8';
+}
+.t-icon-chevron-up-double-s:before {
+  content: '\E0F9';
+}
+.t-icon-chevron-up-double:before {
+  content: '\E0FA';
+}
+.t-icon-chevron-up-rectangle:before {
+  content: '\E0FB';
+}
+.t-icon-chevron-up-s:before {
+  content: '\E0FC';
+}
+.t-icon-chevron-up:before {
+  content: '\E0FD';
+}
+.t-icon-chicken:before {
+  content: '\E0FE';
+}
+.t-icon-chili:before {
+  content: '\E0FF';
+}
+.t-icon-chimney-1:before {
+  content: '\E100';
+}
+.t-icon-chimney-2:before {
+  content: '\E101';
+}
+.t-icon-chimney:before {
+  content: '\E102';
+}
+.t-icon-chinese-cabbage:before {
+  content: '\E103';
+}
+.t-icon-church:before {
+  content: '\E104';
+}
+.t-icon-circle:before {
+  content: '\E105';
+}
+.t-icon-city-1:before {
+  content: '\E106';
+}
+.t-icon-city-10:before {
+  content: '\E107';
+}
+.t-icon-city-11:before {
+  content: '\E108';
+}
+.t-icon-city-12:before {
+  content: '\E109';
+}
+.t-icon-city-13:before {
+  content: '\E10A';
+}
+.t-icon-city-14:before {
+  content: '\E10B';
+}
+.t-icon-city-15:before {
+  content: '\E10C';
+}
+.t-icon-city-2:before {
+  content: '\E10D';
+}
+.t-icon-city-3:before {
+  content: '\E10E';
+}
+.t-icon-city-4:before {
+  content: '\E10F';
+}
+.t-icon-city-5:before {
+  content: '\E110';
+}
+.t-icon-city-6:before {
+  content: '\E111';
+}
+.t-icon-city-7:before {
+  content: '\E112';
+}
+.t-icon-city-8:before {
+  content: '\E113';
+}
+.t-icon-city-9:before {
+  content: '\E114';
+}
+.t-icon-city-ancient-1:before {
+  content: '\E115';
+}
+.t-icon-city-ancient-2:before {
+  content: '\E116';
+}
+.t-icon-city-ancient:before {
+  content: '\E117';
+}
+.t-icon-city:before {
+  content: '\E118';
+}
+.t-icon-clear-formatting-1:before {
+  content: '\E119';
+}
+.t-icon-clear-formatting:before {
+  content: '\E11A';
+}
+.t-icon-clear:before {
+  content: '\E11B';
+}
+.t-icon-close-circle-filled:before {
+  content: '\E11C';
+}
+.t-icon-close-circle:before {
+  content: '\E11D';
+}
+.t-icon-close-octagon:before {
+  content: '\E11E';
+}
+.t-icon-close-rectangle:before {
+  content: '\E11F';
+}
+.t-icon-close:before {
+  content: '\E120';
+}
+.t-icon-cloud-download:before {
+  content: '\E121';
+}
+.t-icon-cloud-upload:before {
+  content: '\E122';
+}
+.t-icon-cloud:before {
+  content: '\E123';
+}
+.t-icon-cloudy-day:before {
+  content: '\E124';
+}
+.t-icon-cloudy-night-rain:before {
+  content: '\E125';
+}
+.t-icon-cloudy-night:before {
+  content: '\E126';
+}
+.t-icon-cloudy-rain:before {
+  content: '\E127';
+}
+.t-icon-cloudy-sunny:before {
+  content: '\E128';
+}
+.t-icon-code-1:before {
+  content: '\E129';
+}
+.t-icon-code-off:before {
+  content: '\E12A';
+}
+.t-icon-code:before {
+  content: '\E12B';
+}
+.t-icon-cola:before {
+  content: '\E12C';
+}
+.t-icon-collage:before {
+  content: '\E12D';
+}
+.t-icon-collection:before {
+  content: '\E12E';
+}
+.t-icon-color-invert:before {
+  content: '\E12F';
+}
+.t-icon-combination:before {
+  content: '\E130';
+}
+.t-icon-command:before {
+  content: '\E131';
+}
+.t-icon-compass-1:before {
+  content: '\E132';
+}
+.t-icon-compass:before {
+  content: '\E133';
+}
+.t-icon-component-breadcrumb:before {
+  content: '\E134';
+}
+.t-icon-component-checkbox:before {
+  content: '\E135';
+}
+.t-icon-component-divider-horizontal:before {
+  content: '\E136';
+}
+.t-icon-component-divider-vertical:before {
+  content: '\E137';
+}
+.t-icon-component-dropdown:before {
+  content: '\E138';
+}
+.t-icon-component-grid:before {
+  content: '\E139';
+}
+.t-icon-component-input:before {
+  content: '\E13A';
+}
+.t-icon-component-layout:before {
+  content: '\E13B';
+}
+.t-icon-component-radio:before {
+  content: '\E13C';
+}
+.t-icon-component-space:before {
+  content: '\E13D';
+}
+.t-icon-component-steps:before {
+  content: '\E13E';
+}
+.t-icon-component-switch:before {
+  content: '\E13F';
+}
+.t-icon-constraint:before {
+  content: '\E140';
+}
+.t-icon-contrast-1:before {
+  content: '\E141';
+}
+.t-icon-contrast:before {
+  content: '\E142';
+}
+.t-icon-control-platform:before {
+  content: '\E143';
+}
+.t-icon-cooperate:before {
+  content: '\E144';
+}
+.t-icon-coordinate-system:before {
+  content: '\E145';
+}
+.t-icon-copy:before {
+  content: '\E146';
+}
+.t-icon-copyright:before {
+  content: '\E147';
+}
+.t-icon-corn:before {
+  content: '\E148';
+}
+.t-icon-coupon:before {
+  content: '\E149';
+}
+.t-icon-course:before {
+  content: '\E14A';
+}
+.t-icon-cpu:before {
+  content: '\E14B';
+}
+.t-icon-crack:before {
+  content: '\E14C';
+}
+.t-icon-creditcard-add:before {
+  content: '\E14D';
+}
+.t-icon-creditcard-off:before {
+  content: '\E14E';
+}
+.t-icon-creditcard:before {
+  content: '\E14F';
+}
+.t-icon-crooked-smile:before {
+  content: '\E150';
+}
+.t-icon-cry-and-laugh:before {
+  content: '\E151';
+}
+.t-icon-cry-loudly:before {
+  content: '\E152';
+}
+.t-icon-css3:before {
+  content: '\E153';
+}
+.t-icon-cucumber:before {
+  content: '\E154';
+}
+.t-icon-currency-exchange:before {
+  content: '\E155';
+}
+.t-icon-cursor:before {
+  content: '\E156';
+}
+.t-icon-curtain:before {
+  content: '\E157';
+}
+.t-icon-curve:before {
+  content: '\E158';
+}
+.t-icon-cut-1:before {
+  content: '\E159';
+}
+.t-icon-cut:before {
+  content: '\E15A';
+}
+.t-icon-dam-1:before {
+  content: '\E15B';
+}
+.t-icon-dam-2:before {
+  content: '\E15C';
+}
+.t-icon-dam-3:before {
+  content: '\E15D';
+}
+.t-icon-dam-4:before {
+  content: '\E15E';
+}
+.t-icon-dam-5:before {
+  content: '\E15F';
+}
+.t-icon-dam-6:before {
+  content: '\E160';
+}
+.t-icon-dam-7:before {
+  content: '\E161';
+}
+.t-icon-dam:before {
+  content: '\E162';
+}
+.t-icon-dart-board:before {
+  content: '\E163';
+}
+.t-icon-dashboard-1:before {
+  content: '\E164';
+}
+.t-icon-dashboard:before {
+  content: '\E165';
+}
+.t-icon-data-base:before {
+  content: '\E166';
+}
+.t-icon-data-checked:before {
+  content: '\E167';
+}
+.t-icon-data-display:before {
+  content: '\E168';
+}
+.t-icon-data-error:before {
+  content: '\E169';
+}
+.t-icon-data-search:before {
+  content: '\E16A';
+}
+.t-icon-data:before {
+  content: '\E16B';
+}
+.t-icon-delete-1:before {
+  content: '\E16C';
+}
+.t-icon-delete-time:before {
+  content: '\E16D';
+}
+.t-icon-delete:before {
+  content: '\E16E';
+}
+.t-icon-delta:before {
+  content: '\E16F';
+}
+.t-icon-depressed:before {
+  content: '\E170';
+}
+.t-icon-desktop-1:before {
+  content: '\E171';
+}
+.t-icon-desktop:before {
+  content: '\E172';
+}
+.t-icon-despise:before {
+  content: '\E173';
+}
+.t-icon-device:before {
+  content: '\E174';
+}
+.t-icon-discount-filled:before {
+  content: '\E175';
+}
+.t-icon-discount:before {
+  content: '\E176';
+}
+.t-icon-dissatisfaction:before {
+  content: '\E177';
+}
+.t-icon-divide:before {
+  content: '\E178';
+}
+.t-icon-dividers-1:before {
+  content: '\E179';
+}
+.t-icon-dividers:before {
+  content: '\E17A';
+}
+.t-icon-doge:before {
+  content: '\E17B';
+}
+.t-icon-double-storey:before {
+  content: '\E17C';
+}
+.t-icon-download-1:before {
+  content: '\E17D';
+}
+.t-icon-download:before {
+  content: '\E17E';
+}
+.t-icon-downscale:before {
+  content: '\E17F';
+}
+.t-icon-drag-drop:before {
+  content: '\E180';
+}
+.t-icon-drag-move:before {
+  content: '\E181';
+}
+.t-icon-drink:before {
+  content: '\E182';
+}
+.t-icon-drumstick:before {
+  content: '\E183';
+}
+.t-icon-dv:before {
+  content: '\E184';
+}
+.t-icon-dvd:before {
+  content: '\E185';
+}
+.t-icon-earphone:before {
+  content: '\E186';
+}
+.t-icon-earth:before {
+  content: '\E187';
+}
+.t-icon-edit-1:before {
+  content: '\E188';
+}
+.t-icon-edit-2:before {
+  content: '\E189';
+}
+.t-icon-edit-off:before {
+  content: '\E18A';
+}
+.t-icon-edit:before {
+  content: '\E18B';
+}
+.t-icon-education:before {
+  content: '\E18C';
+}
+.t-icon-eggplant:before {
+  content: '\E18D';
+}
+.t-icon-ellipsis:before {
+  content: '\E18E';
+}
+.t-icon-emo-emotional:before {
+  content: '\E18F';
+}
+.t-icon-enter:before {
+  content: '\E190';
+}
+.t-icon-equal:before {
+  content: '\E191';
+}
+.t-icon-error-circle-filled:before {
+  content: '\E192';
+}
+.t-icon-error-circle:before {
+  content: '\E193';
+}
+.t-icon-error-triangle:before {
+  content: '\E194';
+}
+.t-icon-error:before {
+  content: '\E195';
+}
+.t-icon-excited-1:before {
+  content: '\E196';
+}
+.t-icon-excited:before {
+  content: '\E197';
+}
+.t-icon-expand-horizontal:before {
+  content: '\E198';
+}
+.t-icon-expand-vertical:before {
+  content: '\E199';
+}
+.t-icon-explore-off:before {
+  content: '\E19A';
+}
+.t-icon-explore:before {
+  content: '\E19B';
+}
+.t-icon-exposure:before {
+  content: '\E19C';
+}
+.t-icon-extension-off:before {
+  content: '\E19D';
+}
+.t-icon-extension:before {
+  content: '\E19E';
+}
+.t-icon-face-retouching:before {
+  content: '\E19F';
+}
+.t-icon-fact-check:before {
+  content: '\E1A0';
+}
+.t-icon-fahrenheit-scale:before {
+  content: '\E1A1';
+}
+.t-icon-feel-at-ease:before {
+  content: '\E1A2';
+}
+.t-icon-ferocious:before {
+  content: '\E1A3';
+}
+.t-icon-ferris-wheel:before {
+  content: '\E1A4';
+}
+.t-icon-file-1:before {
+  content: '\E1A5';
+}
+.t-icon-file-add-1:before {
+  content: '\E1A6';
+}
+.t-icon-file-add:before {
+  content: '\E1A7';
+}
+.t-icon-file-attachment:before {
+  content: '\E1A8';
+}
+.t-icon-file-blocked:before {
+  content: '\E1A9';
+}
+.t-icon-file-code-1:before {
+  content: '\E1AA';
+}
+.t-icon-file-code:before {
+  content: '\E1AB';
+}
+.t-icon-file-copy:before {
+  content: '\E1AC';
+}
+.t-icon-file-download:before {
+  content: '\E1AD';
+}
+.t-icon-file-excel:before {
+  content: '\E1AE';
+}
+.t-icon-file-export:before {
+  content: '\E1AF';
+}
+.t-icon-file-icon:before {
+  content: '\E1B0';
+}
+.t-icon-file-image:before {
+  content: '\E1B1';
+}
+.t-icon-file-import:before {
+  content: '\E1B2';
+}
+.t-icon-file-locked:before {
+  content: '\E1B3';
+}
+.t-icon-file-minus:before {
+  content: '\E1B4';
+}
+.t-icon-file-music:before {
+  content: '\E1B5';
+}
+.t-icon-file-onenote:before {
+  content: '\E1B6';
+}
+.t-icon-file-outlook:before {
+  content: '\E1B7';
+}
+.t-icon-file-paste:before {
+  content: '\E1B8';
+}
+.t-icon-file-pdf:before {
+  content: '\E1B9';
+}
+.t-icon-file-powerpoint:before {
+  content: '\E1BA';
+}
+.t-icon-file-restore:before {
+  content: '\E1BB';
+}
+.t-icon-file-safety:before {
+  content: '\E1BC';
+}
+.t-icon-file-search:before {
+  content: '\E1BD';
+}
+.t-icon-file-setting:before {
+  content: '\E1BE';
+}
+.t-icon-file-teams:before {
+  content: '\E1BF';
+}
+.t-icon-file-unknown:before {
+  content: '\E1C0';
+}
+.t-icon-file-unlocked:before {
+  content: '\E1C1';
+}
+.t-icon-file-word:before {
+  content: '\E1C2';
+}
+.t-icon-file-zip:before {
+  content: '\E1C3';
+}
+.t-icon-file:before {
+  content: '\E1C4';
+}
+.t-icon-fill-color-1:before {
+  content: '\E1C5';
+}
+.t-icon-fill-color:before {
+  content: '\E1C6';
+}
+.t-icon-film-1:before {
+  content: '\E1C7';
+}
+.t-icon-film:before {
+  content: '\E1C8';
+}
+.t-icon-filter-1:before {
+  content: '\E1C9';
+}
+.t-icon-filter-2:before {
+  content: '\E1CA';
+}
+.t-icon-filter-3:before {
+  content: '\E1CB';
+}
+.t-icon-filter-clear:before {
+  content: '\E1CC';
+}
+.t-icon-filter-off:before {
+  content: '\E1CD';
+}
+.t-icon-filter:before {
+  content: '\E1CE';
+}
+.t-icon-fingerprint-1:before {
+  content: '\E1CF';
+}
+.t-icon-fingerprint-2:before {
+  content: '\E1D0';
+}
+.t-icon-fingerprint-3:before {
+  content: '\E1D1';
+}
+.t-icon-fingerprint:before {
+  content: '\E1D2';
+}
+.t-icon-fish:before {
+  content: '\E1D3';
+}
+.t-icon-flag-1:before {
+  content: '\E1D4';
+}
+.t-icon-flag-2:before {
+  content: '\E1D5';
+}
+.t-icon-flag-3:before {
+  content: '\E1D6';
+}
+.t-icon-flag-4:before {
+  content: '\E1D7';
+}
+.t-icon-flag:before {
+  content: '\E1D8';
+}
+.t-icon-flashlight:before {
+  content: '\E1D9';
+}
+.t-icon-flight-landing:before {
+  content: '\E1DA';
+}
+.t-icon-flight-takeoff:before {
+  content: '\E1DB';
+}
+.t-icon-flip-smiling-face:before {
+  content: '\E1DC';
+}
+.t-icon-flip-to-back:before {
+  content: '\E1DD';
+}
+.t-icon-flip-to-front:before {
+  content: '\E1DE';
+}
+.t-icon-focus:before {
+  content: '\E1DF';
+}
+.t-icon-fog-night:before {
+  content: '\E1E0';
+}
+.t-icon-fog-sunny:before {
+  content: '\E1E1';
+}
+.t-icon-fog:before {
+  content: '\E1E2';
+}
+.t-icon-folder-1:before {
+  content: '\E1E3';
+}
+.t-icon-folder-add-1:before {
+  content: '\E1E4';
+}
+.t-icon-folder-add:before {
+  content: '\E1E5';
+}
+.t-icon-folder-blocked:before {
+  content: '\E1E6';
+}
+.t-icon-folder-details:before {
+  content: '\E1E7';
+}
+.t-icon-folder-export:before {
+  content: '\E1E8';
+}
+.t-icon-folder-import:before {
+  content: '\E1E9';
+}
+.t-icon-folder-locked:before {
+  content: '\E1EA';
+}
+.t-icon-folder-minus:before {
+  content: '\E1EB';
+}
+.t-icon-folder-move:before {
+  content: '\E1EC';
+}
+.t-icon-folder-off:before {
+  content: '\E1ED';
+}
+.t-icon-folder-open-1:before {
+  content: '\E1EE';
+}
+.t-icon-folder-open:before {
+  content: '\E1EF';
+}
+.t-icon-folder-search:before {
+  content: '\E1F0';
+}
+.t-icon-folder-setting:before {
+  content: '\E1F1';
+}
+.t-icon-folder-shared:before {
+  content: '\E1F2';
+}
+.t-icon-folder-unlocked:before {
+  content: '\E1F3';
+}
+.t-icon-folder-zip:before {
+  content: '\E1F4';
+}
+.t-icon-folder:before {
+  content: '\E1F5';
+}
+.t-icon-forest:before {
+  content: '\E1F6';
+}
+.t-icon-fork:before {
+  content: '\E1F7';
+}
+.t-icon-form:before {
+  content: '\E1F8';
+}
+.t-icon-format-horizontal-align-bottom:before {
+  content: '\E1F9';
+}
+.t-icon-format-horizontal-align-center:before {
+  content: '\E1FA';
+}
+.t-icon-format-horizontal-align-top:before {
+  content: '\E1FB';
+}
+.t-icon-format-vertical-align-center:before {
+  content: '\E1FC';
+}
+.t-icon-format-vertical-align-left:before {
+  content: '\E1FD';
+}
+.t-icon-format-vertical-align-right:before {
+  content: '\E1FE';
+}
+.t-icon-forward:before {
+  content: '\E1FF';
+}
+.t-icon-frame-1:before {
+  content: '\E200';
+}
+.t-icon-frame:before {
+  content: '\E201';
+}
+.t-icon-fries:before {
+  content: '\E202';
+}
+.t-icon-fullscreen-1:before {
+  content: '\E203';
+}
+.t-icon-fullscreen-2:before {
+  content: '\E204';
+}
+.t-icon-fullscreen-exit-1:before {
+  content: '\E205';
+}
+.t-icon-fullscreen-exit:before {
+  content: '\E206';
+}
+.t-icon-fullscreen:before {
+  content: '\E207';
+}
+.t-icon-function-curve:before {
+  content: '\E208';
+}
+.t-icon-functions-1:before {
+  content: '\E209';
+}
+.t-icon-functions:before {
+  content: '\E20A';
+}
+.t-icon-gamepad-1:before {
+  content: '\E20B';
+}
+.t-icon-gamepad:before {
+  content: '\E20C';
+}
+.t-icon-gamma:before {
+  content: '\E20D';
+}
+.t-icon-garlic:before {
+  content: '\E20E';
+}
+.t-icon-gender-female:before {
+  content: '\E20F';
+}
+.t-icon-gender-male:before {
+  content: '\E210';
+}
+.t-icon-gesture-applause:before {
+  content: '\E211';
+}
+.t-icon-gesture-click:before {
+  content: '\E212';
+}
+.t-icon-gesture-down:before {
+  content: '\E213';
+}
+.t-icon-gesture-expansion:before {
+  content: '\E214';
+}
+.t-icon-gesture-left-slip:before {
+  content: '\E215';
+}
+.t-icon-gesture-left:before {
+  content: '\E216';
+}
+.t-icon-gesture-pray-1:before {
+  content: '\E217';
+}
+.t-icon-gesture-pray:before {
+  content: '\E218';
+}
+.t-icon-gesture-press:before {
+  content: '\E219';
+}
+.t-icon-gesture-ranslation-1:before {
+  content: '\E21A';
+}
+.t-icon-gesture-ranslation:before {
+  content: '\E21B';
+}
+.t-icon-gesture-right-slip:before {
+  content: '\E21C';
+}
+.t-icon-gesture-right:before {
+  content: '\E21D';
+}
+.t-icon-gesture-slide-up:before {
+  content: '\E21E';
+}
+.t-icon-gesture-up-1:before {
+  content: '\E21F';
+}
+.t-icon-gesture-up-2:before {
+  content: '\E220';
+}
+.t-icon-gesture-up-and-down:before {
+  content: '\E221';
+}
+.t-icon-gesture-up:before {
+  content: '\E222';
+}
+.t-icon-gesture-wipe-down:before {
+  content: '\E223';
+}
+.t-icon-gift:before {
+  content: '\E224';
+}
+.t-icon-giggle:before {
+  content: '\E225';
+}
+.t-icon-git-branch:before {
+  content: '\E226';
+}
+.t-icon-git-commit:before {
+  content: '\E227';
+}
+.t-icon-git-merge:before {
+  content: '\E228';
+}
+.t-icon-git-pull-request:before {
+  content: '\E229';
+}
+.t-icon-git-repository-commits:before {
+  content: '\E22A';
+}
+.t-icon-git-repository-private:before {
+  content: '\E22B';
+}
+.t-icon-git-repository:before {
+  content: '\E22C';
+}
+.t-icon-gps:before {
+  content: '\E22D';
+}
+.t-icon-grape:before {
+  content: '\E22E';
+}
+.t-icon-greater-than-or-equal:before {
+  content: '\E22F';
+}
+.t-icon-greater-than:before {
+  content: '\E230';
+}
+.t-icon-green-onion:before {
+  content: '\E231';
+}
+.t-icon-grid-add:before {
+  content: '\E232';
+}
+.t-icon-grid-view:before {
+  content: '\E233';
+}
+.t-icon-guitar:before {
+  content: '\E234';
+}
+.t-icon-hamburger:before {
+  content: '\E235';
+}
+.t-icon-happy:before {
+  content: '\E236';
+}
+.t-icon-hard-disk-storage:before {
+  content: '\E237';
+}
+.t-icon-hard-drive:before {
+  content: '\E238';
+}
+.t-icon-hashtag:before {
+  content: '\E239';
+}
+.t-icon-hd:before {
+  content: '\E23A';
+}
+.t-icon-heart-filled:before {
+  content: '\E23B';
+}
+.t-icon-heart:before {
+  content: '\E23C';
+}
+.t-icon-help-circle-filled:before {
+  content: '\E23D';
+}
+.t-icon-help-circle:before {
+  content: '\E23E';
+}
+.t-icon-help-rectangle:before {
+  content: '\E23F';
+}
+.t-icon-help:before {
+  content: '\E240';
+}
+.t-icon-highlight-1:before {
+  content: '\E241';
+}
+.t-icon-highlight:before {
+  content: '\E242';
+}
+.t-icon-history-setting:before {
+  content: '\E243';
+}
+.t-icon-history:before {
+  content: '\E244';
+}
+.t-icon-home:before {
+  content: '\E245';
+}
+.t-icon-hospital-1:before {
+  content: '\E246';
+}
+.t-icon-hospital:before {
+  content: '\E247';
+}
+.t-icon-hotspot-wave:before {
+  content: '\E248';
+}
+.t-icon-hourglass:before {
+  content: '\E249';
+}
+.t-icon-houses-1:before {
+  content: '\E24A';
+}
+.t-icon-houses-2:before {
+  content: '\E24B';
+}
+.t-icon-houses:before {
+  content: '\E24C';
+}
+.t-icon-html5:before {
+  content: '\E24D';
+}
+.t-icon-https:before {
+  content: '\E24E';
+}
+.t-icon-ice-cream:before {
+  content: '\E24F';
+}
+.t-icon-icon:before {
+  content: '\E250';
+}
+.t-icon-image-1:before {
+  content: '\E251';
+}
+.t-icon-image-add:before {
+  content: '\E252';
+}
+.t-icon-image-edit:before {
+  content: '\E253';
+}
+.t-icon-image-error:before {
+  content: '\E254';
+}
+.t-icon-image-off:before {
+  content: '\E255';
+}
+.t-icon-image-search:before {
+  content: '\E256';
+}
+.t-icon-image:before {
+  content: '\E257';
+}
+.t-icon-indent-left:before {
+  content: '\E258';
+}
+.t-icon-indent-right:before {
+  content: '\E259';
+}
+.t-icon-indicator:before {
+  content: '\E25A';
+}
+.t-icon-info-circle-filled:before {
+  content: '\E25B';
+}
+.t-icon-info-circle:before {
+  content: '\E25C';
+}
+.t-icon-ink:before {
+  content: '\E25D';
+}
+.t-icon-install-desktop:before {
+  content: '\E25E';
+}
+.t-icon-install-mobile:before {
+  content: '\E25F';
+}
+.t-icon-install:before {
+  content: '\E260';
+}
+.t-icon-institution-checked:before {
+  content: '\E261';
+}
+.t-icon-institution:before {
+  content: '\E262';
+}
+.t-icon-internet:before {
+  content: '\E263';
+}
+.t-icon-ipod:before {
+  content: '\E264';
+}
+.t-icon-joyful:before {
+  content: '\E265';
+}
+.t-icon-jump-off:before {
+  content: '\E266';
+}
+.t-icon-jump:before {
+  content: '\E267';
+}
+.t-icon-keyboard:before {
+  content: '\E268';
+}
+.t-icon-laptop:before {
+  content: '\E269';
+}
+.t-icon-layers:before {
+  content: '\E26A';
+}
+.t-icon-layout:before {
+  content: '\E26B';
+}
+.t-icon-leaderboard:before {
+  content: '\E26C';
+}
+.t-icon-lemon-slice:before {
+  content: '\E26D';
+}
+.t-icon-lemon:before {
+  content: '\E26E';
+}
+.t-icon-less-than-or-equal:before {
+  content: '\E26F';
+}
+.t-icon-less-than:before {
+  content: '\E270';
+}
+.t-icon-letters-a:before {
+  content: '\E271';
+}
+.t-icon-letters-b:before {
+  content: '\E272';
+}
+.t-icon-letters-c:before {
+  content: '\E273';
+}
+.t-icon-letters-d:before {
+  content: '\E274';
+}
+.t-icon-letters-e:before {
+  content: '\E275';
+}
+.t-icon-letters-f:before {
+  content: '\E276';
+}
+.t-icon-letters-g:before {
+  content: '\E277';
+}
+.t-icon-letters-h:before {
+  content: '\E278';
+}
+.t-icon-letters-i:before {
+  content: '\E279';
+}
+.t-icon-letters-j:before {
+  content: '\E27A';
+}
+.t-icon-letters-k:before {
+  content: '\E27B';
+}
+.t-icon-letters-l:before {
+  content: '\E27C';
+}
+.t-icon-letters-m:before {
+  content: '\E27D';
+}
+.t-icon-letters-n:before {
+  content: '\E27E';
+}
+.t-icon-letters-o:before {
+  content: '\E27F';
+}
+.t-icon-letters-p:before {
+  content: '\E280';
+}
+.t-icon-letters-q:before {
+  content: '\E281';
+}
+.t-icon-letters-r:before {
+  content: '\E282';
+}
+.t-icon-letters-s:before {
+  content: '\E283';
+}
+.t-icon-letters-t:before {
+  content: '\E284';
+}
+.t-icon-letters-u:before {
+  content: '\E285';
+}
+.t-icon-letters-v:before {
+  content: '\E286';
+}
+.t-icon-letters-w:before {
+  content: '\E287';
+}
+.t-icon-letters-x:before {
+  content: '\E288';
+}
+.t-icon-letters-y:before {
+  content: '\E289';
+}
+.t-icon-letters-z:before {
+  content: '\E28A';
+}
+.t-icon-lightbulb-circle:before {
+  content: '\E28B';
+}
+.t-icon-lightbulb:before {
+  content: '\E28C';
+}
+.t-icon-lighthouse-1:before {
+  content: '\E28D';
+}
+.t-icon-lighthouse-2:before {
+  content: '\E28E';
+}
+.t-icon-lighthouse:before {
+  content: '\E28F';
+}
+.t-icon-lighting-circle:before {
+  content: '\E290';
+}
+.t-icon-line-height:before {
+  content: '\E291';
+}
+.t-icon-link-1:before {
+  content: '\E292';
+}
+.t-icon-link-unlink:before {
+  content: '\E293';
+}
+.t-icon-link:before {
+  content: '\E294';
+}
+.t-icon-liquor:before {
+  content: '\E295';
+}
+.t-icon-list:before {
+  content: '\E296';
+}
+.t-icon-load:before {
+  content: '\E297';
+}
+.t-icon-loading:before {
+  content: '\E298';
+}
+.t-icon-location-1:before {
+  content: '\E299';
+}
+.t-icon-location-enlargement:before {
+  content: '\E29A';
+}
+.t-icon-location-error:before {
+  content: '\E29B';
+}
+.t-icon-location-parking-place:before {
+  content: '\E29C';
+}
+.t-icon-location-reduction:before {
+  content: '\E29D';
+}
+.t-icon-location-setting:before {
+  content: '\E29E';
+}
+.t-icon-location:before {
+  content: '\E29F';
+}
+.t-icon-lock-off:before {
+  content: '\E2A0';
+}
+.t-icon-lock-on:before {
+  content: '\E2A1';
+}
+.t-icon-lock-time:before {
+  content: '\E2A2';
+}
+.t-icon-login:before {
+  content: '\E2A3';
+}
+.t-icon-logo-adobe-illustrate:before {
+  content: '\E2A4';
+}
+.t-icon-logo-adobe-photoshop-1:before {
+  content: '\E2A5';
+}
+.t-icon-logo-adobe-photoshop:before {
+  content: '\E2A6';
+}
+.t-icon-logo-android:before {
+  content: '\E2A7';
+}
+.t-icon-logo-apple-filled:before {
+  content: '\E2A8';
+}
+.t-icon-logo-apple:before {
+  content: '\E2A9';
+}
+.t-icon-logo-behance:before {
+  content: '\E2AA';
+}
+.t-icon-logo-chrome-filled:before {
+  content: '\E2AB';
+}
+.t-icon-logo-chrome:before {
+  content: '\E2AC';
+}
+.t-icon-logo-cinema4d:before {
+  content: '\E2AD';
+}
+.t-icon-logo-codepen:before {
+  content: '\E2AE';
+}
+.t-icon-logo-codesandbox:before {
+  content: '\E2AF';
+}
+.t-icon-logo-dribbble:before {
+  content: '\E2B0';
+}
+.t-icon-logo-facebook:before {
+  content: '\E2B1';
+}
+.t-icon-logo-figma:before {
+  content: '\E2B2';
+}
+.t-icon-logo-framer:before {
+  content: '\E2B3';
+}
+.t-icon-logo-github-filled:before {
+  content: '\E2B4';
+}
+.t-icon-logo-github:before {
+  content: '\E2B5';
+}
+.t-icon-logo-gitlab:before {
+  content: '\E2B6';
+}
+.t-icon-logo-ie-filled:before {
+  content: '\E2B7';
+}
+.t-icon-logo-ie:before {
+  content: '\E2B8';
+}
+.t-icon-logo-instagram:before {
+  content: '\E2B9';
+}
+.t-icon-logo-qq:before {
+  content: '\E2BA';
+}
+.t-icon-logo-twitter:before {
+  content: '\E2BB';
+}
+.t-icon-logo-wechat-stroke:before {
+  content: '\E2BC';
+}
+.t-icon-logo-wechat:before {
+  content: '\E2BD';
+}
+.t-icon-logo-wecom:before {
+  content: '\E2BE';
+}
+.t-icon-logo-windows-filled:before {
+  content: '\E2BF';
+}
+.t-icon-logo-windows:before {
+  content: '\E2C0';
+}
+.t-icon-logo-youtube:before {
+  content: '\E2C1';
+}
+.t-icon-logout:before {
+  content: '\E2C2';
+}
+.t-icon-look-around:before {
+  content: '\E2C3';
+}
+.t-icon-loudspeaker:before {
+  content: '\E2C4';
+}
+.t-icon-mail:before {
+  content: '\E2C5';
+}
+.t-icon-map-3d:before {
+  content: '\E2C6';
+}
+.t-icon-map-add:before {
+  content: '\E2C7';
+}
+.t-icon-map-aiming:before {
+  content: '\E2C8';
+}
+.t-icon-map-blocked:before {
+  content: '\E2C9';
+}
+.t-icon-map-bubble:before {
+  content: '\E2CA';
+}
+.t-icon-map-cancel:before {
+  content: '\E2CB';
+}
+.t-icon-map-chat:before {
+  content: '\E2CC';
+}
+.t-icon-map-checked:before {
+  content: '\E2CD';
+}
+.t-icon-map-collection:before {
+  content: '\E2CE';
+}
+.t-icon-map-connection:before {
+  content: '\E2CF';
+}
+.t-icon-map-distance:before {
+  content: '\E2D0';
+}
+.t-icon-map-double:before {
+  content: '\E2D1';
+}
+.t-icon-map-edit:before {
+  content: '\E2D2';
+}
+.t-icon-map-grid:before {
+  content: '\E2D3';
+}
+.t-icon-map-information-1:before {
+  content: '\E2D4';
+}
+.t-icon-map-information-2:before {
+  content: '\E2D5';
+}
+.t-icon-map-information:before {
+  content: '\E2D6';
+}
+.t-icon-map-location:before {
+  content: '\E2D7';
+}
+.t-icon-map-locked:before {
+  content: '\E2D8';
+}
+.t-icon-map-marked:before {
+  content: '\E2D9';
+}
+.t-icon-map-navigation:before {
+  content: '\E2DA';
+}
+.t-icon-map-outline:before {
+  content: '\E2DB';
+}
+.t-icon-map-route-planning:before {
+  content: '\E2DC';
+}
+.t-icon-map-ruler:before {
+  content: '\E2DD';
+}
+.t-icon-map-safety:before {
+  content: '\E2DE';
+}
+.t-icon-map-search-1:before {
+  content: '\E2DF';
+}
+.t-icon-map-search:before {
+  content: '\E2E0';
+}
+.t-icon-map-setting:before {
+  content: '\E2E1';
+}
+.t-icon-map-unlocked:before {
+  content: '\E2E2';
+}
+.t-icon-map:before {
+  content: '\E2E3';
+}
+.t-icon-mark-as-unread:before {
+  content: '\E2E4';
+}
+.t-icon-markup:before {
+  content: '\E2E5';
+}
+.t-icon-mathematics:before {
+  content: '\E2E6';
+}
+.t-icon-measurement-1:before {
+  content: '\E2E7';
+}
+.t-icon-measurement-2:before {
+  content: '\E2E8';
+}
+.t-icon-measurement:before {
+  content: '\E2E9';
+}
+.t-icon-meat-pepper:before {
+  content: '\E2EA';
+}
+.t-icon-media-library:before {
+  content: '\E2EB';
+}
+.t-icon-member:before {
+  content: '\E2EC';
+}
+.t-icon-menu-application:before {
+  content: '\E2ED';
+}
+.t-icon-menu-fold:before {
+  content: '\E2EE';
+}
+.t-icon-menu-unfold:before {
+  content: '\E2EF';
+}
+.t-icon-menu:before {
+  content: '\E2F0';
+}
+.t-icon-merge-cells:before {
+  content: '\E2F1';
+}
+.t-icon-microphone-1:before {
+  content: '\E2F2';
+}
+.t-icon-microphone-2:before {
+  content: '\E2F3';
+}
+.t-icon-microphone:before {
+  content: '\E2F4';
+}
+.t-icon-milk:before {
+  content: '\E2F5';
+}
+.t-icon-minus-circle-filled:before {
+  content: '\E2F6';
+}
+.t-icon-minus-circle:before {
+  content: '\E2F7';
+}
+.t-icon-minus-rectangle-filled:before {
+  content: '\E2F8';
+}
+.t-icon-minus-rectangle:before {
+  content: '\E2F9';
+}
+.t-icon-minus:before {
+  content: '\E2FA';
+}
+.t-icon-mirror:before {
+  content: '\E2FB';
+}
+.t-icon-mobile-blocked:before {
+  content: '\E2FC';
+}
+.t-icon-mobile-list:before {
+  content: '\E2FD';
+}
+.t-icon-mobile-navigation:before {
+  content: '\E2FE';
+}
+.t-icon-mobile-shortcut:before {
+  content: '\E2FF';
+}
+.t-icon-mobile-vibrate:before {
+  content: '\E300';
+}
+.t-icon-mobile:before {
+  content: '\E301';
+}
+.t-icon-mode-dark:before {
+  content: '\E302';
+}
+.t-icon-mode-light:before {
+  content: '\E303';
+}
+.t-icon-module:before {
+  content: '\E304';
+}
+.t-icon-money:before {
+  content: '\E305';
+}
+.t-icon-monument:before {
+  content: '\E306';
+}
+.t-icon-moon-fall:before {
+  content: '\E307';
+}
+.t-icon-moon-rising:before {
+  content: '\E308';
+}
+.t-icon-moon:before {
+  content: '\E309';
+}
+.t-icon-more:before {
+  content: '\E30A';
+}
+.t-icon-mosque-1:before {
+  content: '\E30B';
+}
+.t-icon-mosque:before {
+  content: '\E30C';
+}
+.t-icon-mouse:before {
+  content: '\E30D';
+}
+.t-icon-move-1:before {
+  content: '\E30E';
+}
+.t-icon-move:before {
+  content: '\E30F';
+}
+.t-icon-movie-clapper:before {
+  content: '\E310';
+}
+.t-icon-multiply:before {
+  content: '\E311';
+}
+.t-icon-museum-1:before {
+  content: '\E312';
+}
+.t-icon-museum-2:before {
+  content: '\E313';
+}
+.t-icon-museum:before {
+  content: '\E314';
+}
+.t-icon-mushroom-1:before {
+  content: '\E315';
+}
+.t-icon-mushroom:before {
+  content: '\E316';
+}
+.t-icon-music-1:before {
+  content: '\E317';
+}
+.t-icon-music-2:before {
+  content: '\E318';
+}
+.t-icon-music-rectangle-add:before {
+  content: '\E319';
+}
+.t-icon-music:before {
+  content: '\E31A';
+}
+.t-icon-navigation-arrow:before {
+  content: '\E31B';
+}
+.t-icon-next:before {
+  content: '\E31C';
+}
+.t-icon-no-expression:before {
+  content: '\E31D';
+}
+.t-icon-noodle:before {
+  content: '\E31E';
+}
+.t-icon-notification-add:before {
+  content: '\E31F';
+}
+.t-icon-notification-circle:before {
+  content: '\E320';
+}
+.t-icon-notification-error:before {
+  content: '\E321';
+}
+.t-icon-notification-filled:before {
+  content: '\E322';
+}
+.t-icon-notification:before {
+  content: '\E323';
+}
+.t-icon-numbers-0-1:before {
+  content: '\E324';
+}
+.t-icon-numbers-0:before {
+  content: '\E325';
+}
+.t-icon-numbers-1-1:before {
+  content: '\E326';
+}
+.t-icon-numbers-1:before {
+  content: '\E327';
+}
+.t-icon-numbers-2-1:before {
+  content: '\E328';
+}
+.t-icon-numbers-2:before {
+  content: '\E329';
+}
+.t-icon-numbers-3-1:before {
+  content: '\E32A';
+}
+.t-icon-numbers-3:before {
+  content: '\E32B';
+}
+.t-icon-numbers-4-1:before {
+  content: '\E32C';
+}
+.t-icon-numbers-4:before {
+  content: '\E32D';
+}
+.t-icon-numbers-5-1:before {
+  content: '\E32E';
+}
+.t-icon-numbers-5:before {
+  content: '\E32F';
+}
+.t-icon-numbers-6-1:before {
+  content: '\E330';
+}
+.t-icon-numbers-6:before {
+  content: '\E331';
+}
+.t-icon-numbers-7-1:before {
+  content: '\E332';
+}
+.t-icon-numbers-7:before {
+  content: '\E333';
+}
+.t-icon-numbers-8-1:before {
+  content: '\E334';
+}
+.t-icon-numbers-8:before {
+  content: '\E335';
+}
+.t-icon-numbers-9-1:before {
+  content: '\E336';
+}
+.t-icon-numbers-9:before {
+  content: '\E337';
+}
+.t-icon-nut:before {
+  content: '\E338';
+}
+.t-icon-object-storage:before {
+  content: '\E339';
+}
+.t-icon-open-mouth:before {
+  content: '\E33A';
+}
+.t-icon-opera:before {
+  content: '\E33B';
+}
+.t-icon-order-adjustment-column:before {
+  content: '\E33C';
+}
+.t-icon-order-ascending:before {
+  content: '\E33D';
+}
+.t-icon-order-descending:before {
+  content: '\E33E';
+}
+.t-icon-outbox:before {
+  content: '\E33F';
+}
+.t-icon-page-first:before {
+  content: '\E340';
+}
+.t-icon-page-head:before {
+  content: '\E341';
+}
+.t-icon-page-last:before {
+  content: '\E342';
+}
+.t-icon-palace-1:before {
+  content: '\E343';
+}
+.t-icon-palace-2:before {
+  content: '\E344';
+}
+.t-icon-palace-3:before {
+  content: '\E345';
+}
+.t-icon-palace-4:before {
+  content: '\E346';
+}
+.t-icon-palace:before {
+  content: '\E347';
+}
+.t-icon-palette-1:before {
+  content: '\E348';
+}
+.t-icon-palette:before {
+  content: '\E349';
+}
+.t-icon-panorama-horizontal:before {
+  content: '\E34A';
+}
+.t-icon-panorama-vertical:before {
+  content: '\E34B';
+}
+.t-icon-pantone:before {
+  content: '\E34C';
+}
+.t-icon-parabola:before {
+  content: '\E34D';
+}
+.t-icon-parentheses:before {
+  content: '\E34E';
+}
+.t-icon-paste:before {
+  content: '\E34F';
+}
+.t-icon-patio:before {
+  content: '\E350';
+}
+.t-icon-pause-circle-filled:before {
+  content: '\E351';
+}
+.t-icon-pause-circle-stroke:before {
+  content: '\E352';
+}
+.t-icon-pause-circle:before {
+  content: '\E353';
+}
+.t-icon-pause:before {
+  content: '\E354';
+}
+.t-icon-pea:before {
+  content: '\E355';
+}
+.t-icon-peach:before {
+  content: '\E356';
+}
+.t-icon-pear:before {
+  content: '\E357';
+}
+.t-icon-pearl-of-the-orient:before {
+  content: '\E358';
+}
+.t-icon-pen-ball:before {
+  content: '\E359';
+}
+.t-icon-pen-brush:before {
+  content: '\E35A';
+}
+.t-icon-pen-mark:before {
+  content: '\E35B';
+}
+.t-icon-pen-quill:before {
+  content: '\E35C';
+}
+.t-icon-pen:before {
+  content: '\E35D';
+}
+.t-icon-pending:before {
+  content: '\E35E';
+}
+.t-icon-percent:before {
+  content: '\E35F';
+}
+.t-icon-personal-information:before {
+  content: '\E360';
+}
+.t-icon-phone-locked:before {
+  content: '\E361';
+}
+.t-icon-phone-search:before {
+  content: '\E362';
+}
+.t-icon-pi:before {
+  content: '\E363';
+}
+.t-icon-piano:before {
+  content: '\E364';
+}
+.t-icon-pin-filled:before {
+  content: '\E365';
+}
+.t-icon-pin:before {
+  content: '\E366';
+}
+.t-icon-play-circle-filled:before {
+  content: '\E367';
+}
+.t-icon-play-circle-stroke-add:before {
+  content: '\E368';
+}
+.t-icon-play-circle-stroke:before {
+  content: '\E369';
+}
+.t-icon-play-circle:before {
+  content: '\E36A';
+}
+.t-icon-play-demo:before {
+  content: '\E36B';
+}
+.t-icon-play-rectangle:before {
+  content: '\E36C';
+}
+.t-icon-play:before {
+  content: '\E36D';
+}
+.t-icon-plus:before {
+  content: '\E36E';
+}
+.t-icon-popsicle:before {
+  content: '\E36F';
+}
+.t-icon-portrait:before {
+  content: '\E370';
+}
+.t-icon-pout:before {
+  content: '\E371';
+}
+.t-icon-poweroff:before {
+  content: '\E372';
+}
+.t-icon-precise-monitor:before {
+  content: '\E373';
+}
+.t-icon-previous:before {
+  content: '\E374';
+}
+.t-icon-print:before {
+  content: '\E375';
+}
+.t-icon-pumpkin:before {
+  content: '\E376';
+}
+.t-icon-pyramid-maya:before {
+  content: '\E377';
+}
+.t-icon-pyramid:before {
+  content: '\E378';
+}
+.t-icon-qrcode:before {
+  content: '\E379';
+}
+.t-icon-quadratic:before {
+  content: '\E37A';
+}
+.t-icon-questionnaire:before {
+  content: '\E37B';
+}
+.t-icon-queue:before {
+  content: '\E37C';
+}
+.t-icon-radar:before {
+  content: '\E37D';
+}
+.t-icon-radio-1:before {
+  content: '\E37E';
+}
+.t-icon-radio-2:before {
+  content: '\E37F';
+}
+.t-icon-radish:before {
+  content: '\E380';
+}
+.t-icon-rain-heavy:before {
+  content: '\E381';
+}
+.t-icon-rain-light:before {
+  content: '\E382';
+}
+.t-icon-rain-medium:before {
+  content: '\E383';
+}
+.t-icon-rainbow:before {
+  content: '\E384';
+}
+.t-icon-rectangle:before {
+  content: '\E385';
+}
+.t-icon-refresh:before {
+  content: '\E386';
+}
+.t-icon-relation:before {
+  content: '\E387';
+}
+.t-icon-relativity:before {
+  content: '\E388';
+}
+.t-icon-remote-wave:before {
+  content: '\E389';
+}
+.t-icon-remove:before {
+  content: '\E38A';
+}
+.t-icon-replay:before {
+  content: '\E38B';
+}
+.t-icon-rice-ball:before {
+  content: '\E38C';
+}
+.t-icon-rice:before {
+  content: '\E38D';
+}
+.t-icon-roast:before {
+  content: '\E38E';
+}
+.t-icon-rocket:before {
+  content: '\E38F';
+}
+.t-icon-rollback:before {
+  content: '\E390';
+}
+.t-icon-rollfront:before {
+  content: '\E391';
+}
+.t-icon-root-list:before {
+  content: '\E392';
+}
+.t-icon-rotate-locked:before {
+  content: '\E393';
+}
+.t-icon-rotate:before {
+  content: '\E394';
+}
+.t-icon-rotation:before {
+  content: '\E395';
+}
+.t-icon-round:before {
+  content: '\E396';
+}
+.t-icon-router-wave:before {
+  content: '\E397';
+}
+.t-icon-rss:before {
+  content: '\E398';
+}
+.t-icon-ruler:before {
+  content: '\E399';
+}
+.t-icon-sailing-hotel:before {
+  content: '\E39A';
+}
+.t-icon-sandwich:before {
+  content: '\E39B';
+}
+.t-icon-saturation:before {
+  content: '\E39C';
+}
+.t-icon-sausage:before {
+  content: '\E39D';
+}
+.t-icon-save:before {
+  content: '\E39E';
+}
+.t-icon-saving-pot:before {
+  content: '\E39F';
+}
+.t-icon-scan:before {
+  content: '\E3A0';
+}
+.t-icon-screen-4k:before {
+  content: '\E3A1';
+}
+.t-icon-screencast:before {
+  content: '\E3A2';
+}
+.t-icon-screenshot:before {
+  content: '\E3A3';
+}
+.t-icon-scroll-bar:before {
+  content: '\E3A4';
+}
+.t-icon-sd-card-1:before {
+  content: '\E3A5';
+}
+.t-icon-sd-card:before {
+  content: '\E3A6';
+}
+.t-icon-search-error:before {
+  content: '\E3A7';
+}
+.t-icon-search:before {
+  content: '\E3A8';
+}
+.t-icon-secured:before {
+  content: '\E3A9';
+}
+.t-icon-send-cancel:before {
+  content: '\E3AA';
+}
+.t-icon-send:before {
+  content: '\E3AB';
+}
+.t-icon-sensors-1:before {
+  content: '\E3AC';
+}
+.t-icon-sensors-2:before {
+  content: '\E3AD';
+}
+.t-icon-sensors-off:before {
+  content: '\E3AE';
+}
+.t-icon-sensors:before {
+  content: '\E3AF';
+}
+.t-icon-serenity:before {
+  content: '\E3B0';
+}
+.t-icon-server:before {
+  content: '\E3B1';
+}
+.t-icon-service:before {
+  content: '\E3B2';
+}
+.t-icon-setting-1:before {
+  content: '\E3B3';
+}
+.t-icon-setting:before {
+  content: '\E3B4';
+}
+.t-icon-share-1:before {
+  content: '\E3B5';
+}
+.t-icon-share:before {
+  content: '\E3B6';
+}
+.t-icon-sharpness:before {
+  content: '\E3B7';
+}
+.t-icon-shield-error:before {
+  content: '\E3B8';
+}
+.t-icon-shimen:before {
+  content: '\E3B9';
+}
+.t-icon-shop-1:before {
+  content: '\E3BA';
+}
+.t-icon-shop-2:before {
+  content: '\E3BB';
+}
+.t-icon-shop-3:before {
+  content: '\E3BC';
+}
+.t-icon-shop-4:before {
+  content: '\E3BD';
+}
+.t-icon-shop-5:before {
+  content: '\E3BE';
+}
+.t-icon-shop:before {
+  content: '\E3BF';
+}
+.t-icon-shrimp:before {
+  content: '\E3C0';
+}
+.t-icon-shrink-horizontal:before {
+  content: '\E3C1';
+}
+.t-icon-shrink-vertical:before {
+  content: '\E3C2';
+}
+.t-icon-shutter:before {
+  content: '\E3C3';
+}
+.t-icon-shutup:before {
+  content: '\E3C4';
+}
+.t-icon-sim-card-1:before {
+  content: '\E3C5';
+}
+.t-icon-sim-card-2:before {
+  content: '\E3C6';
+}
+.t-icon-sim-card:before {
+  content: '\E3C7';
+}
+.t-icon-sinister-smile:before {
+  content: '\E3C8';
+}
+.t-icon-sip:before {
+  content: '\E3C9';
+}
+.t-icon-slash:before {
+  content: '\E3CA';
+}
+.t-icon-sleep:before {
+  content: '\E3CB';
+}
+.t-icon-slice:before {
+  content: '\E3CC';
+}
+.t-icon-slideshow:before {
+  content: '\E3CD';
+}
+.t-icon-smile:before {
+  content: '\E3CE';
+}
+.t-icon-sneer:before {
+  content: '\E3CF';
+}
+.t-icon-snowflake:before {
+  content: '\E3D0';
+}
+.t-icon-sonic:before {
+  content: '\E3D1';
+}
+.t-icon-sound-down:before {
+  content: '\E3D2';
+}
+.t-icon-sound-high:before {
+  content: '\E3D3';
+}
+.t-icon-sound-low:before {
+  content: '\E3D4';
+}
+.t-icon-sound-mute-1:before {
+  content: '\E3D5';
+}
+.t-icon-sound-mute:before {
+  content: '\E3D6';
+}
+.t-icon-sound-up:before {
+  content: '\E3D7';
+}
+.t-icon-sound:before {
+  content: '\E3D8';
+}
+.t-icon-space:before {
+  content: '\E3D9';
+}
+.t-icon-speechless-1:before {
+  content: '\E3DA';
+}
+.t-icon-star-filled:before {
+  content: '\E3DB';
+}
+.t-icon-star:before {
+  content: '\E3DC';
+}
+.t-icon-statue-of-jesus:before {
+  content: '\E3DD';
+}
+.t-icon-sticky-note:before {
+  content: '\E3DE';
+}
+.t-icon-stop-circle-filled:before {
+  content: '\E3DF';
+}
+.t-icon-stop-circle-stroke:before {
+  content: '\E3E0';
+}
+.t-icon-stop-circle:before {
+  content: '\E3E1';
+}
+.t-icon-stop:before {
+  content: '\E3E2';
+}
+.t-icon-store:before {
+  content: '\E3E3';
+}
+.t-icon-street-road-1:before {
+  content: '\E3E4';
+}
+.t-icon-street-road:before {
+  content: '\E3E5';
+}
+.t-icon-subtitle:before {
+  content: '\E3E6';
+}
+.t-icon-subway-line:before {
+  content: '\E3E7';
+}
+.t-icon-sum:before {
+  content: '\E3E8';
+}
+.t-icon-sun-fall:before {
+  content: '\E3E9';
+}
+.t-icon-sun-rising:before {
+  content: '\E3EA';
+}
+.t-icon-sunny:before {
+  content: '\E3EB';
+}
+.t-icon-support:before {
+  content: '\E3EC';
+}
+.t-icon-surprised-1:before {
+  content: '\E3ED';
+}
+.t-icon-surprised:before {
+  content: '\E3EE';
+}
+.t-icon-swap-left:before {
+  content: '\E3EF';
+}
+.t-icon-swap-right:before {
+  content: '\E3F0';
+}
+.t-icon-swap:before {
+  content: '\E3F1';
+}
+.t-icon-swear-1:before {
+  content: '\E3F2';
+}
+.t-icon-swear-2:before {
+  content: '\E3F3';
+}
+.t-icon-system-2:before {
+  content: '\E3F4';
+}
+.t-icon-system-3:before {
+  content: '\E3F5';
+}
+.t-icon-system-application:before {
+  content: '\E3F6';
+}
+.t-icon-system-blocked:before {
+  content: '\E3F7';
+}
+.t-icon-system-code:before {
+  content: '\E3F8';
+}
+.t-icon-system-components:before {
+  content: '\E3F9';
+}
+.t-icon-system-coordinate:before {
+  content: '\E3FA';
+}
+.t-icon-system-device:before {
+  content: '\E3FB';
+}
+.t-icon-system-interface:before {
+  content: '\E3FC';
+}
+.t-icon-system-location:before {
+  content: '\E3FD';
+}
+.t-icon-system-locked:before {
+  content: '\E3FE';
+}
+.t-icon-system-log:before {
+  content: '\E3FF';
+}
+.t-icon-system-marked:before {
+  content: '\E400';
+}
+.t-icon-system-messages:before {
+  content: '\E401';
+}
+.t-icon-system-regulation:before {
+  content: '\E402';
+}
+.t-icon-system-search:before {
+  content: '\E403';
+}
+.t-icon-system-setting:before {
+  content: '\E404';
+}
+.t-icon-system-storage:before {
+  content: '\E405';
+}
+.t-icon-system-sum:before {
+  content: '\E406';
+}
+.t-icon-system-unlocked:before {
+  content: '\E407';
+}
+.t-icon-tab:before {
+  content: '\E408';
+}
+.t-icon-table-1:before {
+  content: '\E409';
+}
+.t-icon-table-2:before {
+  content: '\E40A';
+}
+.t-icon-table-add:before {
+  content: '\E40B';
+}
+.t-icon-table-split:before {
+  content: '\E40C';
+}
+.t-icon-table:before {
+  content: '\E40D';
+}
+.t-icon-tag:before {
+  content: '\E40E';
+}
+.t-icon-tangerinr:before {
+  content: '\E40F';
+}
+.t-icon-tape:before {
+  content: '\E410';
+}
+.t-icon-task-1:before {
+  content: '\E411';
+}
+.t-icon-task-add-1:before {
+  content: '\E412';
+}
+.t-icon-task-add:before {
+  content: '\E413';
+}
+.t-icon-task-checked:before {
+  content: '\E414';
+}
+.t-icon-task-error:before {
+  content: '\E415';
+}
+.t-icon-task-location:before {
+  content: '\E416';
+}
+.t-icon-task-marked:before {
+  content: '\E417';
+}
+.t-icon-task-setting:before {
+  content: '\E418';
+}
+.t-icon-task-visible:before {
+  content: '\E419';
+}
+.t-icon-task:before {
+  content: '\E41A';
+}
+.t-icon-tea:before {
+  content: '\E41B';
+}
+.t-icon-teahouse:before {
+  content: '\E41C';
+}
+.t-icon-template:before {
+  content: '\E41D';
+}
+.t-icon-temple:before {
+  content: '\E41E';
+}
+.t-icon-terminal-rectangle-1:before {
+  content: '\E41F';
+}
+.t-icon-terminal-rectangle:before {
+  content: '\E420';
+}
+.t-icon-terminal-window:before {
+  content: '\E421';
+}
+.t-icon-terminal:before {
+  content: '\E422';
+}
+.t-icon-textbox:before {
+  content: '\E423';
+}
+.t-icon-textformat-bold:before {
+  content: '\E424';
+}
+.t-icon-textformat-color:before {
+  content: '\E425';
+}
+.t-icon-textformat-italic:before {
+  content: '\E426';
+}
+.t-icon-textformat-strikethrough:before {
+  content: '\E427';
+}
+.t-icon-textformat-underline:before {
+  content: '\E428';
+}
+.t-icon-textformat-wrap:before {
+  content: '\E429';
+}
+.t-icon-theaters:before {
+  content: '\E42A';
+}
+.t-icon-thumb-down-1:before {
+  content: '\E42B';
+}
+.t-icon-thumb-down-2:before {
+  content: '\E42C';
+}
+.t-icon-thumb-down:before {
+  content: '\E42D';
+}
+.t-icon-thumb-up-1:before {
+  content: '\E42E';
+}
+.t-icon-thumb-up-2:before {
+  content: '\E42F';
+}
+.t-icon-thumb-up:before {
+  content: '\E430';
+}
+.t-icon-thunder:before {
+  content: '\E431';
+}
+.t-icon-thunderstorm-night:before {
+  content: '\E432';
+}
+.t-icon-thunderstorm-sunny:before {
+  content: '\E433';
+}
+.t-icon-thunderstorm:before {
+  content: '\E434';
+}
+.t-icon-ticket:before {
+  content: '\E435';
+}
+.t-icon-time-filled:before {
+  content: '\E436';
+}
+.t-icon-time:before {
+  content: '\E437';
+}
+.t-icon-tips-double:before {
+  content: '\E438';
+}
+.t-icon-tips:before {
+  content: '\E439';
+}
+.t-icon-tomato:before {
+  content: '\E43A';
+}
+.t-icon-tools-circle:before {
+  content: '\E43B';
+}
+.t-icon-tools:before {
+  content: '\E43C';
+}
+.t-icon-tornado:before {
+  content: '\E43D';
+}
+.t-icon-tower-1:before {
+  content: '\E43E';
+}
+.t-icon-tower-2:before {
+  content: '\E43F';
+}
+.t-icon-tower-3:before {
+  content: '\E440';
+}
+.t-icon-tower-clock:before {
+  content: '\E441';
+}
+.t-icon-tower:before {
+  content: '\E442';
+}
+.t-icon-town:before {
+  content: '\E443';
+}
+.t-icon-traffic-events:before {
+  content: '\E444';
+}
+.t-icon-traffic:before {
+  content: '\E445';
+}
+.t-icon-transform-1:before {
+  content: '\E446';
+}
+.t-icon-transform-2:before {
+  content: '\E447';
+}
+.t-icon-transform-3:before {
+  content: '\E448';
+}
+.t-icon-transform:before {
+  content: '\E449';
+}
+.t-icon-translate-1:before {
+  content: '\E44A';
+}
+.t-icon-translate:before {
+  content: '\E44B';
+}
+.t-icon-tree-list:before {
+  content: '\E44C';
+}
+.t-icon-tree-round-dot-vertical:before {
+  content: '\E44D';
+}
+.t-icon-tree-round-dot:before {
+  content: '\E44E';
+}
+.t-icon-tree-square-dot-vertical:before {
+  content: '\E44F';
+}
+.t-icon-tree-square-dot:before {
+  content: '\E450';
+}
+.t-icon-trending-down:before {
+  content: '\E451';
+}
+.t-icon-trending-up:before {
+  content: '\E452';
+}
+.t-icon-tv-1:before {
+  content: '\E453';
+}
+.t-icon-tv-2:before {
+  content: '\E454';
+}
+.t-icon-tv:before {
+  content: '\E455';
+}
+.t-icon-typography:before {
+  content: '\E456';
+}
+.t-icon-uncomfortable-1:before {
+  content: '\E457';
+}
+.t-icon-uncomfortable-2:before {
+  content: '\E458';
+}
+.t-icon-uncomfortable:before {
+  content: '\E459';
+}
+.t-icon-undertake-delivery:before {
+  content: '\E45A';
+}
+.t-icon-undertake-environment-protection:before {
+  content: '\E45B';
+}
+.t-icon-undertake-hold-up:before {
+  content: '\E45C';
+}
+.t-icon-undertake-transaction:before {
+  content: '\E45D';
+}
+.t-icon-undertake:before {
+  content: '\E45E';
+}
+.t-icon-unfold-less:before {
+  content: '\E45F';
+}
+.t-icon-unfold-more:before {
+  content: '\E460';
+}
+.t-icon-unhappy-1:before {
+  content: '\E461';
+}
+.t-icon-unhappy:before {
+  content: '\E462';
+}
+.t-icon-uninstall:before {
+  content: '\E463';
+}
+.t-icon-upload-1:before {
+  content: '\E464';
+}
+.t-icon-upload:before {
+  content: '\E465';
+}
+.t-icon-upscale:before {
+  content: '\E466';
+}
+.t-icon-usb:before {
+  content: '\E467';
+}
+.t-icon-user-1:before {
+  content: '\E468';
+}
+.t-icon-user-add:before {
+  content: '\E469';
+}
+.t-icon-user-arrow-down:before {
+  content: '\E46A';
+}
+.t-icon-user-arrow-left:before {
+  content: '\E46B';
+}
+.t-icon-user-arrow-right:before {
+  content: '\E46C';
+}
+.t-icon-user-arrow-up:before {
+  content: '\E46D';
+}
+.t-icon-user-avatar:before {
+  content: '\E46E';
+}
+.t-icon-user-blocked:before {
+  content: '\E46F';
+}
+.t-icon-user-business:before {
+  content: '\E470';
+}
+.t-icon-user-checked-1:before {
+  content: '\E471';
+}
+.t-icon-user-checked:before {
+  content: '\E472';
+}
+.t-icon-user-circle:before {
+  content: '\E473';
+}
+.t-icon-user-clear:before {
+  content: '\E474';
+}
+.t-icon-user-error-1:before {
+  content: '\E475';
+}
+.t-icon-user-invisible:before {
+  content: '\E476';
+}
+.t-icon-user-list:before {
+  content: '\E477';
+}
+.t-icon-user-locked:before {
+  content: '\E478';
+}
+.t-icon-user-marked:before {
+  content: '\E479';
+}
+.t-icon-user-password:before {
+  content: '\E47A';
+}
+.t-icon-user-safety:before {
+  content: '\E47B';
+}
+.t-icon-user-search:before {
+  content: '\E47C';
+}
+.t-icon-user-setting:before {
+  content: '\E47D';
+}
+.t-icon-user-talk-1:before {
+  content: '\E47E';
+}
+.t-icon-user-talk-off-1:before {
+  content: '\E47F';
+}
+.t-icon-user-talk:before {
+  content: '\E480';
+}
+.t-icon-user-time:before {
+  content: '\E481';
+}
+.t-icon-user-transmit:before {
+  content: '\E482';
+}
+.t-icon-user-unknown:before {
+  content: '\E483';
+}
+.t-icon-user-unlocked:before {
+  content: '\E484';
+}
+.t-icon-user-vip:before {
+  content: '\E485';
+}
+.t-icon-user-visible:before {
+  content: '\E486';
+}
+.t-icon-user:before {
+  content: '\E487';
+}
+.t-icon-usergroup-add:before {
+  content: '\E488';
+}
+.t-icon-usergroup-clear:before {
+  content: '\E489';
+}
+.t-icon-usergroup:before {
+  content: '\E48A';
+}
+.t-icon-vehicle:before {
+  content: '\E48B';
+}
+.t-icon-verified:before {
+  content: '\E48C';
+}
+.t-icon-verify:before {
+  content: '\E48D';
+}
+.t-icon-video-camera-1:before {
+  content: '\E48E';
+}
+.t-icon-video-camera-2:before {
+  content: '\E48F';
+}
+.t-icon-video-camera-dollar:before {
+  content: '\E490';
+}
+.t-icon-video-camera-minus:before {
+  content: '\E491';
+}
+.t-icon-video-camera-music:before {
+  content: '\E492';
+}
+.t-icon-video-camera-off:before {
+  content: '\E493';
+}
+.t-icon-video-camera:before {
+  content: '\E494';
+}
+.t-icon-video-library:before {
+  content: '\E495';
+}
+.t-icon-video:before {
+  content: '\E496';
+}
+.t-icon-view-agenda:before {
+  content: '\E497';
+}
+.t-icon-view-column:before {
+  content: '\E498';
+}
+.t-icon-view-in-ar:before {
+  content: '\E499';
+}
+.t-icon-view-list:before {
+  content: '\E49A';
+}
+.t-icon-view-module:before {
+  content: '\E49B';
+}
+.t-icon-visual-recognition:before {
+  content: '\E49C';
+}
+.t-icon-wallet:before {
+  content: '\E49D';
+}
+.t-icon-watch:before {
+  content: '\E49E';
+}
+.t-icon-watermelon:before {
+  content: '\E49F';
+}
+.t-icon-wave-left:before {
+  content: '\E4A0';
+}
+.t-icon-wave-right:before {
+  content: '\E4A1';
+}
+.t-icon-wealth-1:before {
+  content: '\E4A2';
+}
+.t-icon-wealth:before {
+  content: '\E4A3';
+}
+.t-icon-widget:before {
+  content: '\E4A4';
+}
+.t-icon-wifi-1:before {
+  content: '\E4A5';
+}
+.t-icon-wifi-off-1:before {
+  content: '\E4A6';
+}
+.t-icon-wifi-off:before {
+  content: '\E4A7';
+}
+.t-icon-wifi:before {
+  content: '\E4A8';
+}
+.t-icon-window-1:before {
+  content: '\E4A9';
+}
+.t-icon-window:before {
+  content: '\E4AA';
+}
+.t-icon-windy-rain:before {
+  content: '\E4AB';
+}
+.t-icon-windy:before {
+  content: '\E4AC';
+}
+.t-icon-wink:before {
+  content: '\E4AD';
+}
+.t-icon-work-history:before {
+  content: '\E4AE';
+}
+.t-icon-work-off:before {
+  content: '\E4AF';
+}
+.t-icon-work:before {
+  content: '\E4B0';
+}
+.t-icon-wry-smile:before {
+  content: '\E4B1';
+}
+.t-icon-zoom-in:before {
+  content: '\E4B2';
+}
+.t-icon-zoom-out:before {
+  content: '\E4B3';
+}
diff --git a/miniprogram_npm/tdesign-miniprogram/tag/README.en-US.md b/miniprogram_npm/tdesign-miniprogram/tag/README.en-US.md
new file mode 100644
index 0000000..20b1309
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/tag/README.en-US.md
@@ -0,0 +1,100 @@
+:: BASE_DOC ::
+
+## API
+
+### Tag Props
+
+name | type | default | description | required
+-- | -- | -- | -- | --
+style | Object | - | CSS(Cascading Style Sheets) | N
+custom-style | Object | - | CSS(Cascading Style Sheets)锛寀sed to set style on virtual component | N
+closable | Boolean / Object | false | \- | N
+disabled | Boolean | false | \- | N
+icon | String / Object / Slot | - | [see more ts definition](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N
+max-width | String / Number | - | \- | N
+shape | String | square | options: square/round/mark | N
+size | String | medium | options: small/medium/large/extra-large | N
+theme | String | default | options: default/primary/warning/danger/success | N
+variant | String | dark | options: dark/light/outline/light-outline | N
+
+### Tag Events
+
+name | params | description
+-- | -- | --
+click | - | \-
+close | - | \-
+### Tag External Classes
+
+className | Description
+-- | --
+t-class | \-
+
+
+### CheckTag Props
+
+name | type | default | description | required
+-- | -- | -- | -- | --
+style | Object | - | CSS(Cascading Style Sheets) | N
+custom-style | Object | - | CSS(Cascading Style Sheets)锛寀sed to set style on virtual component | N
+checked | Boolean | undefined | \- | N
+default-checked | Boolean | undefined | uncontrolled property | N
+closable | Boolean | false | \- | N
+content | String / Number / Array / Slot | - | [see more ts definition](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N
+disabled | Boolean | false | \- | N
+icon | String / Object / Slot | - | [see more ts definition](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N
+shape | String | square | options: square/round/mark | N
+size | String | medium | options: small/medium/large銆俆ypescript锛歚SizeEnum`銆俒see more ts definition](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N
+variant | String | dark | `0.26.0`銆俹ptions: dark/light/outline/light-outline | N
+
+### CheckTag Events
+
+name | params | description
+-- | -- | --
+change | `(checked: boolean)` | \-
+click | - | \-
+close | \- | \-
+### CheckTag External Classes
+
+className | Description
+-- | --
+t-class | \-
+
+### CSS 鍙橀噺
+
+The component provides the following CSS variables, which can be used to customize styles.
+Name | Default Value | Description 
+-- | -- | --
+--td-tag-close-icon-color | @font-gray-3 | - 
+--td-tag-danger-color | @error-color | - 
+--td-tag-danger-light-color | @error-color-1 | - 
+--td-tag-default-color | @bg-color-component | - 
+--td-tag-default-font-color | @font-gray-1 | - 
+--td-tag-default-light-color | @bg-color-secondarycontainer | - 
+--td-tag-disabled-background-color | @bg-color-component-disabled | - 
+--td-tag-disabled-border-color | @component-border | - 
+--td-tag-disabled-color | @font-gray-4 | - 
+--td-tag-extra-large-font-size | @font-size-base | - 
+--td-tag-extra-large-height | 80rpx | - 
+--td-tag-extra-large-icon-size | 32rpx | - 
+--td-tag-extra-large-padding | 32rpx - 1px | - 
+--td-tag-large-font-size | @font-size-base | - 
+--td-tag-large-height | 56rpx | - 
+--td-tag-large-icon-size | 32rpx | - 
+--td-tag-large-padding | 16rpx - 1px | - 
+--td-tag-mark-border-radius | @tag-round-border-radius | - 
+--td-tag-medium-font-size | @font-size-s | - 
+--td-tag-medium-height | 48rpx | - 
+--td-tag-medium-icon-size | 28rpx | - 
+--td-tag-medium-padding | 16rpx - 1px | - 
+--td-tag-outline-bg-color | @bg-color-container | - 
+--td-tag-primary-color | @brand-color | - 
+--td-tag-primary-light-color | @brand-color-light | - 
+--td-tag-round-border-radius | 999px | - 
+--td-tag-small-font-size | @font-size | - 
+--td-tag-small-height | 40rpx | - 
+--td-tag-small-icon-size | 24rpx | - 
+--td-tag-small-padding | 12rpx - 1px | - 
+--td-tag-square-border-radius | 8rpx | - 
+--td-tag-success-color | @success-color | - 
+--td-tag-success-light-color | @success-color-1 | - 
+--td-tag-warning-color | @warning-color | -
\ No newline at end of file
diff --git a/miniprogram_npm/tdesign-miniprogram/tag/README.md b/miniprogram_npm/tdesign-miniprogram/tag/README.md
new file mode 100644
index 0000000..22fcc76
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/tag/README.md
@@ -0,0 +1,142 @@
+---
+title: Tag 鏍囩
+description: 鐢ㄤ簬琛ㄦ槑涓讳綋鐨勭被鐩紝灞炴�ф垨鐘舵�併��
+spline: data
+isComponent: true
+---
+
+<span class="coverages-badge" style="margin-right: 10px"><img src="https://img.shields.io/badge/coverages%3A%20lines-100%25-blue" /></span><span class="coverages-badge" style="margin-right: 10px"><img src="https://img.shields.io/badge/coverages%3A%20functions-100%25-blue" /></span><span class="coverages-badge" style="margin-right: 10px"><img src="https://img.shields.io/badge/coverages%3A%20statements-100%25-blue" /></span><span class="coverages-badge" style="margin-right: 10px"><img src="https://img.shields.io/badge/coverages%3A%20branches-100%25-blue" /></span>
+## 寮曞叆
+
+鍏ㄥ眬寮曞叆锛屽湪 miniprogram 鏍圭洰褰曚笅鐨刞app.json`涓厤缃紝灞�閮ㄥ紩鍏ワ紝鍦ㄩ渶瑕佸紩鍏ョ殑椤甸潰鎴栫粍浠剁殑`index.json`涓厤缃��
+
+```json
+"usingComponents": {
+  "t-tag": "tdesign-miniprogram/tag/tag",
+  "t-check-tag": "tdesign-miniprogram/check-tag/check-tag"
+}
+```
+
+## 浠g爜婕旂ず
+
+### 缁勪欢绫诲瀷
+
+{{ type }}
+
+鍙叧闂殑鏍囩
+
+{{ closable }}
+
+鍙偣鍑荤殑鏍囩
+
+{{ checkable }}
+
+### 缁勪欢鐘舵��
+
+灞曠ず鍨嬫爣绛�
+
+{{ theme }}
+
+### 缁勪欢灏哄
+
+{{ size }}
+
+
+## API
+
+### Tag Props
+
+鍚嶇О | 绫诲瀷 | 榛樿鍊� | 鎻忚堪 | 蹇呬紶
+-- | -- | -- | -- | --
+style | Object | - | 鏍峰紡 | N
+custom-style | Object | - | 鏍峰紡锛屼竴鑸敤浜庡紑鍚櫄鎷熷寲缁勪欢鑺傜偣鍦烘櫙 | N
+closable | Boolean / Object | false | 鏍囩鏄惁鍙叧闂� | N
+disabled | Boolean | false | 鏍囩绂佺敤鎬侊紝澶辨晥鏍囩涓嶈兘瑙﹀彂浜嬩欢銆傞粯璁ら鏍硷紙theme=default锛夋墠鏈夌鐢ㄦ�� | N
+icon | String / Object / Slot | - | 鏍囩涓殑鍥炬爣锛屽彲鑷畾涔夊浘鏍囧憟鐜般�俒閫氱敤绫诲瀷瀹氫箟](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N
+max-width | String / Number | - | 鏍囩鏈�澶у搴︼紝瀹藉害瓒呭嚭鍚庝細鍑虹幇鐪佺暐鍙枫�傜ず渚嬶細'50px' / 80 (skyline鏆備笉鏀寔璇ュ睘鎬�) | N
+shape | String | square | 鏍囩绫诲瀷锛屾湁涓夌锛氭柟褰€�佸渾瑙掓柟褰€�佹爣璁板瀷銆傚彲閫夐」锛歴quare/round/mark | N
+size | String | medium | 鏍囩灏哄銆傚彲閫夐」锛歴mall/medium/large/extra-large | N
+theme | String | default | 缁勪欢椋庢牸锛岀敤浜庢弿杩扮粍浠朵笉鍚岀殑搴旂敤鍦烘櫙銆傚彲閫夐」锛歞efault/primary/warning/danger/success | N
+variant | String | dark | 鏍囩椋庢牸鍙樹綋銆傚彲閫夐」锛歞ark/light/outline/light-outline | N
+
+### Tag Events
+
+鍚嶇О | 鍙傛暟 | 鎻忚堪
+-- | -- | --
+click | - | 鐐瑰嚮鏃惰Е鍙�
+close | - | 濡傛灉鍏抽棴鎸夐挳瀛樺湪锛岀偣鍑诲叧闂寜閽椂瑙﹀彂
+### Tag External Classes
+
+绫诲悕 | 鎻忚堪
+-- | --
+t-class | 鏍硅妭鐐规牱寮忕被
+
+
+### CheckTag Props
+
+鍚嶇О | 绫诲瀷 | 榛樿鍊� | 鎻忚堪 | 蹇呬紶
+-- | -- | -- | -- | --
+style | Object | - | 鏍峰紡 | N
+custom-style | Object | - | 鏍峰紡锛屼竴鑸敤浜庡紑鍚櫄鎷熷寲缁勪欢鑺傜偣鍦烘櫙 | N
+checked | Boolean | undefined | 鏍囩閫変腑鐨勭姸鎬侊紝榛樿椋庢牸锛坱heme=default锛夋墠鏈夐�変腑鎬� | N
+default-checked | Boolean | undefined | 鏍囩閫変腑鐨勭姸鎬侊紝榛樿椋庢牸锛坱heme=default锛夋墠鏈夐�変腑鎬併�傞潪鍙楁帶灞炴�� | N
+closable | Boolean | false | 鏍囩鏄惁鍙叧闂� | N
+content | String / Number / Array / Slot | - | 缁勪欢瀛愬厓绱狅紱浼犲叆鏁扮粍鏃讹細[閫変腑鍐呭锛岄潪閫変腑鍐呭]銆俒閫氱敤绫诲瀷瀹氫箟](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N
+disabled | Boolean | false | 鏍囩绂佺敤鎬侊紝澶辨晥鏍囩涓嶈兘瑙﹀彂浜嬩欢銆傞粯璁ら鏍硷紙theme=default锛夋墠鏈夌鐢ㄦ�� | N
+icon | String / Object / Slot | - | 鏍囩鍥炬爣銆俒閫氱敤绫诲瀷瀹氫箟](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N
+shape | String | square | 鏍囩绫诲瀷锛屾湁涓夌锛氭柟褰€�佸渾瑙掓柟褰€�佹爣璁板瀷銆傚彲閫夐」锛歴quare/round/mark | N
+size | String | medium | 鏍囩灏哄銆傚彲閫夐」锛歴mall/medium/large銆俆S 绫诲瀷锛歚SizeEnum`銆俒閫氱敤绫诲瀷瀹氫箟](https://github.com/Tencent/tdesign-miniprogram/blob/develop/src/common/common.ts) | N
+variant | String | dark | `0.26.0`銆傛爣绛鹃鏍煎彉浣撱�傚彲閫夐」锛歞ark/light/outline/light-outline | N
+
+### CheckTag Events
+
+鍚嶇О | 鍙傛暟 | 鎻忚堪
+-- | -- | --
+change | `(checked: boolean)` | 鐘舵�佸垏鎹㈡椂瑙﹀彂
+click | - | 鐐瑰嚮鏍囩鏃惰Е鍙�
+close | \- | 濡傛灉鍏抽棴鎸夐挳瀛樺湪锛岀偣鍑诲叧闂寜閽椂瑙﹀彂
+### CheckTag External Classes
+
+绫诲悕 | 鎻忚堪
+-- | --
+t-class | 鏍硅妭鐐规牱寮忕被
+
+### CSS 鍙橀噺
+
+缁勪欢鎻愪緵浜嗕笅鍒� CSS 鍙橀噺锛屽彲鐢ㄤ簬鑷畾涔夋牱寮忋��
+鍚嶇О | 榛樿鍊� | 鎻忚堪 
+-- | -- | --
+--td-tag-close-icon-color | @font-gray-3 | - 
+--td-tag-danger-color | @error-color | - 
+--td-tag-danger-light-color | @error-color-1 | - 
+--td-tag-default-color | @bg-color-component | - 
+--td-tag-default-font-color | @font-gray-1 | - 
+--td-tag-default-light-color | @bg-color-secondarycontainer | - 
+--td-tag-disabled-background-color | @bg-color-component-disabled | - 
+--td-tag-disabled-border-color | @component-border | - 
+--td-tag-disabled-color | @font-gray-4 | - 
+--td-tag-extra-large-font-size | @font-size-base | - 
+--td-tag-extra-large-height | 80rpx | - 
+--td-tag-extra-large-icon-size | 32rpx | - 
+--td-tag-extra-large-padding | 32rpx - 1px | - 
+--td-tag-large-font-size | @font-size-base | - 
+--td-tag-large-height | 56rpx | - 
+--td-tag-large-icon-size | 32rpx | - 
+--td-tag-large-padding | 16rpx - 1px | - 
+--td-tag-mark-border-radius | @tag-round-border-radius | - 
+--td-tag-medium-font-size | @font-size-s | - 
+--td-tag-medium-height | 48rpx | - 
+--td-tag-medium-icon-size | 28rpx | - 
+--td-tag-medium-padding | 16rpx - 1px | - 
+--td-tag-outline-bg-color | @bg-color-container | - 
+--td-tag-primary-color | @brand-color | - 
+--td-tag-primary-light-color | @brand-color-light | - 
+--td-tag-round-border-radius | 999px | - 
+--td-tag-small-font-size | @font-size | - 
+--td-tag-small-height | 40rpx | - 
+--td-tag-small-icon-size | 24rpx | - 
+--td-tag-small-padding | 12rpx - 1px | - 
+--td-tag-square-border-radius | 8rpx | - 
+--td-tag-success-color | @success-color | - 
+--td-tag-success-light-color | @success-color-1 | - 
+--td-tag-warning-color | @warning-color | -
diff --git a/miniprogram_npm/tdesign-miniprogram/tag/props.d.ts b/miniprogram_npm/tdesign-miniprogram/tag/props.d.ts
new file mode 100644
index 0000000..8074655
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/tag/props.d.ts
@@ -0,0 +1,3 @@
+import { TdTagProps } from './type';
+declare const props: TdTagProps;
+export default props;
diff --git a/miniprogram_npm/tdesign-miniprogram/tag/props.js b/miniprogram_npm/tdesign-miniprogram/tag/props.js
new file mode 100644
index 0000000..37b936b
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/tag/props.js
@@ -0,0 +1,36 @@
+const props = {
+    closable: {
+        type: null,
+        value: false,
+    },
+    disabled: {
+        type: Boolean,
+        value: false,
+    },
+    externalClasses: {
+        type: Array,
+    },
+    icon: {
+        type: null,
+    },
+    maxWidth: {
+        type: null,
+    },
+    shape: {
+        type: String,
+        value: 'square',
+    },
+    size: {
+        type: String,
+        value: 'medium',
+    },
+    theme: {
+        type: String,
+        value: 'default',
+    },
+    variant: {
+        type: String,
+        value: 'dark',
+    },
+};
+export default props;
diff --git a/miniprogram_npm/tdesign-miniprogram/tag/tag.d.ts b/miniprogram_npm/tdesign-miniprogram/tag/tag.d.ts
new file mode 100644
index 0000000..2c86ef0
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/tag/tag.d.ts
@@ -0,0 +1,28 @@
+/// <reference types="miniprogram-api-typings" />
+import { SuperComponent } from '../common/src/index';
+export default class Tag extends SuperComponent {
+    data: {
+        prefix: string;
+        classPrefix: string;
+        className: string;
+        tagStyle: string;
+    };
+    properties: import("./type").TdTagProps;
+    externalClasses: string[];
+    options: WechatMiniprogram.Component.ComponentOptions;
+    lifetimes: {
+        attached(): void;
+    };
+    observers: {
+        'size, shape, theme, variant, closable, disabled'(): void;
+        maxWidth(): void;
+        icon(v: any): void;
+        closable(v: any): void;
+    };
+    methods: {
+        setClass(): void;
+        setTagStyle(): string;
+        handleClick(e: WechatMiniprogram.BaseEvent): void;
+        handleClose(e: WechatMiniprogram.BaseEvent): void;
+    };
+}
diff --git a/miniprogram_npm/tdesign-miniprogram/tag/tag.js b/miniprogram_npm/tdesign-miniprogram/tag/tag.js
new file mode 100644
index 0000000..da271cd
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/tag/tag.js
@@ -0,0 +1,93 @@
+var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
+    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
+    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
+    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
+    return c > 3 && r && Object.defineProperty(target, key, r), r;
+};
+import { wxComponent, SuperComponent } from '../common/src/index';
+import config from '../common/config';
+import props from './props';
+import { classNames, isNumber, calcIcon } from '../common/utils';
+const { prefix } = config;
+const name = `${prefix}-tag`;
+let Tag = class Tag extends SuperComponent {
+    constructor() {
+        super(...arguments);
+        this.data = {
+            prefix,
+            classPrefix: name,
+            className: '',
+            tagStyle: '',
+        };
+        this.properties = props;
+        this.externalClasses = [`${prefix}-class`];
+        this.options = {
+            multipleSlots: true,
+        };
+        this.lifetimes = {
+            attached() {
+                this.setClass();
+                this.setTagStyle();
+            },
+        };
+        this.observers = {
+            'size, shape, theme, variant, closable, disabled'() {
+                this.setClass();
+            },
+            maxWidth() {
+                this.setTagStyle();
+            },
+            icon(v) {
+                this.setData({
+                    _icon: calcIcon(v),
+                });
+            },
+            closable(v) {
+                this.setData({
+                    _closable: calcIcon(v, 'close'),
+                });
+            },
+        };
+        this.methods = {
+            setClass() {
+                const { prefix, classPrefix } = this.data;
+                const { size, shape, theme, variant, closable, disabled } = this.properties;
+                const tagClass = [
+                    classPrefix,
+                    `${classPrefix}--${theme || 'default'}`,
+                    `${classPrefix}--${variant}`,
+                    closable ? `${classPrefix}--closable ${prefix}-is-closable` : '',
+                    disabled ? `${classPrefix}--disabled ${prefix}-is-disabled` : '',
+                    `${classPrefix}--${size}`,
+                    `${classPrefix}--${shape}`,
+                ];
+                const className = classNames(tagClass);
+                this.setData({
+                    className,
+                });
+            },
+            setTagStyle() {
+                const { maxWidth } = this.properties;
+                if (!maxWidth) {
+                    return '';
+                }
+                const width = isNumber(maxWidth) ? `${maxWidth}px` : maxWidth;
+                this.setData({ tagStyle: `max-width:${width};` });
+            },
+            handleClick(e) {
+                if (this.data.disabled)
+                    return;
+                this.triggerEvent('click', e);
+            },
+            handleClose(e) {
+                if (this.data.disabled)
+                    return;
+                this.triggerEvent('close', e);
+            },
+        };
+    }
+};
+Tag = __decorate([
+    wxComponent()
+], Tag);
+export default Tag;
diff --git a/miniprogram_npm/tdesign-miniprogram/tag/tag.json b/miniprogram_npm/tdesign-miniprogram/tag/tag.json
new file mode 100644
index 0000000..6f15f57
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/tag/tag.json
@@ -0,0 +1,7 @@
+{
+  "component": true,
+  "styleIsolation": "apply-shared",
+  "usingComponents": {
+    "t-icon": ".././icon/icon"
+  }
+}
diff --git a/miniprogram_npm/tdesign-miniprogram/tag/tag.wxml b/miniprogram_npm/tdesign-miniprogram/tag/tag.wxml
new file mode 100644
index 0000000..ac356cc
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/tag/tag.wxml
@@ -0,0 +1,23 @@
+<wxs src="../common/utils.wxs" module="_" />
+<import src="../common/template/icon.wxml" />
+
+<view
+  class="{{className}} class {{prefix}}-class"
+  style="{{_._style([tagStyle, style, customStyle])}}"
+  bind:tap="handleClick"
+>
+  <view aria-hidden="{{true}}" class="{{classPrefix}}__icon">
+    <template wx:if="{{_icon}}" is="icon" data="{{ tClass: prefix + '-icon', ..._icon }}" />
+    <slot name="icon" />
+  </view>
+  <view class="{{classPrefix}}__text">
+    <slot />
+  </view>
+  <template
+    wx:if="{{_closable}}"
+    is="icon"
+    data="{{class: classPrefix + '__icon-close', tClass: prefix + '-icon', bindclick: 'handleClose',  ariaRole: 'button', ariaLabel: '鍏抽棴',  ..._closable }}"
+    catch:tap="handleClose"
+  />
+  <slot wx:else name="closable" />
+</view>
diff --git a/miniprogram_npm/tdesign-miniprogram/tag/tag.wxss b/miniprogram_npm/tdesign-miniprogram/tag/tag.wxss
new file mode 100644
index 0000000..98af127
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/tag/tag.wxss
@@ -0,0 +1,244 @@
+.t-float-left {
+  float: left;
+}
+.t-float-right {
+  float: right;
+}
+@keyframes tdesign-fade-out {
+  from {
+    opacity: 1;
+  }
+  to {
+    opacity: 0;
+  }
+}
+.hotspot-expanded.relative {
+  position: relative;
+}
+.hotspot-expanded::after {
+  content: '';
+  display: block;
+  position: absolute;
+  left: 0;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  transform: scale(1.5);
+}
+.t-tag {
+  display: inline-flex;
+  align-items: center;
+  border: 2rpx solid transparent;
+  box-sizing: border-box;
+  border-radius: var(--td-tag-square-border-radius, 8rpx);
+  font-size: var(--td-tag-medium-font-size, var(--td-font-size-s, 24rpx));
+  user-select: none;
+  vertical-align: middle;
+}
+.t-tag__text {
+  word-wrap: normal;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+.t-tag__icon,
+.t-tag__icon-close {
+  display: flex;
+  align-items: center;
+}
+.t-tag__icon-close {
+  color: var(--td-tag-close-icon-color, var(--td-text-color-placeholder, var(--td-font-gray-3, rgba(0, 0, 0, 0.4))));
+}
+.t-tag__icon:not(:empty) + .t-tag__text:not(:empty),
+.t-tag__text:not(:empty) + .t-tag__icon-close:not(:empty) {
+  margin-left: 8rpx;
+}
+.t-tag.t-tag--small {
+  height: var(--td-tag-small-height, 40rpx);
+  line-height: var(--td-tag-small-height, 40rpx);
+  padding: 0 var(--td-tag-small-padding, 11rpx);
+  font-size: var(--td-tag-small-font-size, var(--td-font-size, 20rpx));
+}
+.t-tag.t-tag--small .t-icon,
+.t-tag.t-tag--small .t-icon-close {
+  font-size: var(--td-tag-small-icon-size, 24rpx);
+}
+.t-tag.t-tag--small .t-tag__icon:not(:empty) + .t-tag__text:not(:empty),
+.t-tag.t-tag--small .t-tag__text:not(:empty) + .t-tag__icon-close:not(:empty) {
+  margin-left: 4rpx;
+}
+.t-tag.t-tag--medium {
+  height: var(--td-tag-medium-height, 48rpx);
+  line-height: var(--td-tag-medium-height, 48rpx);
+  padding: 0 var(--td-tag-medium-padding, 15rpx);
+  font-size: var(--td-tag-medium-font-size, var(--td-font-size-s, 24rpx));
+}
+.t-tag.t-tag--medium .t-icon,
+.t-tag.t-tag--medium .t-icon-close {
+  font-size: var(--td-tag-medium-icon-size, 28rpx);
+}
+.t-tag.t-tag--large {
+  height: var(--td-tag-large-height, 56rpx);
+  line-height: var(--td-tag-large-height, 56rpx);
+  padding: 0 var(--td-tag-large-padding, 15rpx);
+  font-size: var(--td-tag-large-font-size, var(--td-font-size-base, 28rpx));
+}
+.t-tag.t-tag--large .t-icon,
+.t-tag.t-tag--large .t-icon-close {
+  font-size: var(--td-tag-large-icon-size, 32rpx);
+}
+.t-tag.t-tag--extra-large {
+  height: var(--td-tag-extra-large-height, 80rpx);
+  line-height: var(--td-tag-extra-large-height, 80rpx);
+  padding: 0 var(--td-tag-extra-large-padding, 31rpx);
+  font-size: var(--td-tag-extra-large-font-size, var(--td-font-size-base, 28rpx));
+}
+.t-tag.t-tag--extra-large .t-icon,
+.t-tag.t-tag--extra-large .t-icon-close {
+  font-size: var(--td-tag-extra-large-icon-size, 32rpx);
+}
+.t-tag.t-tag--square {
+  border-radius: var(--td-tag-square-border-radius, 8rpx);
+}
+.t-tag.t-tag--round {
+  border-radius: var(--td-tag-round-border-radius, 999px);
+}
+.t-tag.t-tag--mark {
+  border-radius: 0;
+  border-top-right-radius: var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, 999px));
+  border-bottom-right-radius: var(--td-tag-mark-border-radius, var(--td-tag-round-border-radius, 999px));
+}
+.t-tag--dark.t-tag--default {
+  color: var(--td-font-white-1, #ffffff);
+  border-color: var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)));
+  background-color: var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)));
+}
+.t-tag--dark.t-tag--primary {
+  color: var(--td-font-white-1, #ffffff);
+  border-color: var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)));
+  background-color: var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)));
+}
+.t-tag--dark.t-tag--success {
+  color: var(--td-font-white-1, #ffffff);
+  border-color: var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)));
+  background-color: var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)));
+}
+.t-tag--dark.t-tag--warning {
+  color: var(--td-font-white-1, #ffffff);
+  border-color: var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)));
+  background-color: var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)));
+}
+.t-tag--dark.t-tag--danger {
+  color: var(--td-font-white-1, #ffffff);
+  border-color: var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)));
+  background-color: var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)));
+}
+.t-tag--dark.t-tag--default {
+  color: var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))));
+}
+.t-tag--outline.t-tag--default {
+  color: var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)));
+  border-color: var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)));
+  background-color: var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)));
+}
+.t-tag--outline.t-tag--primary {
+  color: var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)));
+  border-color: var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)));
+  background-color: var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)));
+}
+.t-tag--outline.t-tag--success {
+  color: var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)));
+  border-color: var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)));
+  background-color: var(--td-tag-success-light-color, var(--td-success-color-1, #e3f9e9));
+}
+.t-tag--outline.t-tag--warning {
+  color: var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)));
+  border-color: var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)));
+  background-color: var(--td-tag-warning-light-color, var(--td-warning-color-1, #fff1e9));
+}
+.t-tag--outline.t-tag--danger {
+  color: var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)));
+  border-color: var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)));
+  background-color: var(--td-tag-danger-light-color, var(--td-error-color-1, #fff0ed));
+}
+.t-tag--outline.t-tag--default {
+  color: var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))));
+}
+.t-tag--outline.t-tag--default {
+  background-color: var(--td-tag-outline-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)));
+}
+.t-tag--outline.t-tag--primary {
+  background-color: var(--td-tag-outline-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)));
+}
+.t-tag--outline.t-tag--success {
+  background-color: var(--td-tag-outline-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)));
+}
+.t-tag--outline.t-tag--warning {
+  background-color: var(--td-tag-outline-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)));
+}
+.t-tag--outline.t-tag--danger {
+  background-color: var(--td-tag-outline-bg-color, var(--td-bg-color-container, var(--td-font-white-1, #ffffff)));
+}
+.t-tag--light.t-tag--default {
+  color: var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)));
+  border-color: var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)));
+  background-color: var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)));
+}
+.t-tag--light.t-tag--primary {
+  color: var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)));
+  border-color: var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)));
+  background-color: var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)));
+}
+.t-tag--light.t-tag--success {
+  color: var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)));
+  border-color: var(--td-tag-success-light-color, var(--td-success-color-1, #e3f9e9));
+  background-color: var(--td-tag-success-light-color, var(--td-success-color-1, #e3f9e9));
+}
+.t-tag--light.t-tag--warning {
+  color: var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)));
+  border-color: var(--td-tag-warning-light-color, var(--td-warning-color-1, #fff1e9));
+  background-color: var(--td-tag-warning-light-color, var(--td-warning-color-1, #fff1e9));
+}
+.t-tag--light.t-tag--danger {
+  color: var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)));
+  border-color: var(--td-tag-danger-light-color, var(--td-error-color-1, #fff0ed));
+  background-color: var(--td-tag-danger-light-color, var(--td-error-color-1, #fff0ed));
+}
+.t-tag--light.t-tag--default {
+  color: var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))));
+}
+.t-tag--light-outline.t-tag--default {
+  color: var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)));
+  border-color: var(--td-tag-default-color, var(--td-bg-color-component, var(--td-gray-color-3, #e7e7e7)));
+  background-color: var(--td-tag-default-light-color, var(--td-bg-color-secondarycontainer, var(--td-gray-color-1, #f3f3f3)));
+}
+.t-tag--light-outline.t-tag--primary {
+  color: var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)));
+  border-color: var(--td-tag-primary-color, var(--td-brand-color, var(--td-primary-color-7, #0052d9)));
+  background-color: var(--td-tag-primary-light-color, var(--td-brand-color-light, var(--td-primary-color-1, #f2f3ff)));
+}
+.t-tag--light-outline.t-tag--success {
+  color: var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)));
+  border-color: var(--td-tag-success-color, var(--td-success-color, var(--td-success-color-5, #2ba471)));
+  background-color: var(--td-tag-success-light-color, var(--td-success-color-1, #e3f9e9));
+}
+.t-tag--light-outline.t-tag--warning {
+  color: var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)));
+  border-color: var(--td-tag-warning-color, var(--td-warning-color, var(--td-warning-color-5, #e37318)));
+  background-color: var(--td-tag-warning-light-color, var(--td-warning-color-1, #fff1e9));
+}
+.t-tag--light-outline.t-tag--danger {
+  color: var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)));
+  border-color: var(--td-tag-danger-color, var(--td-error-color, var(--td-error-color-6, #d54941)));
+  background-color: var(--td-tag-danger-light-color, var(--td-error-color-1, #fff0ed));
+}
+.t-tag--light-outline.t-tag--default {
+  color: var(--td-tag-default-font-color, var(--td-text-color-primary, var(--td-font-gray-1, rgba(0, 0, 0, 0.9))));
+  border-color: var(--td-component-border, var(--td-gray-color-4, #dcdcdc));
+}
+.t-tag.t-tag--closable.t-tag--disabled {
+  cursor: not-allowed;
+  color: var(--td-tag-disabled-color, var(--td-text-color-disabled, var(--td-font-gray-4, rgba(0, 0, 0, 0.26))));
+  background-color: var(--td-tag-disabled-background-color, var(--td-bg-color-component-disabled, var(--td-gray-color-2, #eeeeee)));
+  border-color: var(--td-tag-disabled-border-color, var(--td-component-border, var(--td-gray-color-4, #dcdcdc)));
+}
diff --git a/miniprogram_npm/tdesign-miniprogram/tag/type.d.ts b/miniprogram_npm/tdesign-miniprogram/tag/type.d.ts
new file mode 100644
index 0000000..bd1147d
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/tag/type.d.ts
@@ -0,0 +1,38 @@
+export interface TdTagProps {
+    closable?: {
+        type: null;
+        value?: boolean | object;
+    };
+    disabled?: {
+        type: BooleanConstructor;
+        value?: boolean;
+    };
+    externalClasses?: {
+        type: ArrayConstructor;
+        value?: ['t-class'];
+    };
+    icon?: {
+        type: null;
+        value?: string | object;
+    };
+    maxWidth?: {
+        type: null;
+        value?: string | number;
+    };
+    shape?: {
+        type: StringConstructor;
+        value?: 'square' | 'round' | 'mark';
+    };
+    size?: {
+        type: StringConstructor;
+        value?: 'small' | 'medium' | 'large' | 'extra-large';
+    };
+    theme?: {
+        type: StringConstructor;
+        value?: 'default' | 'primary' | 'warning' | 'danger' | 'success';
+    };
+    variant?: {
+        type: StringConstructor;
+        value?: 'dark' | 'light' | 'outline' | 'light-outline';
+    };
+}
diff --git a/miniprogram_npm/tdesign-miniprogram/tag/type.js b/miniprogram_npm/tdesign-miniprogram/tag/type.js
new file mode 100644
index 0000000..cb0ff5c
--- /dev/null
+++ b/miniprogram_npm/tdesign-miniprogram/tag/type.js
@@ -0,0 +1 @@
+export {};
diff --git a/model/ledger.js b/model/ledger.js
index a4cb035..8686e6c 100644
--- a/model/ledger.js
+++ b/model/ledger.js
@@ -1,7 +1,6 @@
 const moment = require('../utils/moment.min');
 
-// 缁熻鍙拌处涓婁紶鎯呭喌
-function parseLedgerStat(subtypes, lastMonth) {
+function name(params) {
   const DEADLINEDAY = 10;
   let monthInfo = {
     totalMust: 0,
@@ -85,6 +84,8 @@
   //閫夐」鍗�
   var t = [];
   var p = [];
+  var tSelf = [];
+  var pSelf = [];
   for (let item of map) {
     let notUpload = 0;
     item[1].forEach(l => {
@@ -100,35 +101,130 @@
     p.push(item[1]);
   }
 
-  return [t, p, monthInfo];
+  return { types: t, items: p, monthInfo };
+}
+
+/**
+ * 瀵瑰彴璐︽垨鑷贰鏌ヨ繘琛岀粺璁★紝绫诲瀷ledgerTypeId涓�-1鐨勬槸鑷贰鏌ワ紝鍏朵綑涓哄彴璐�
+ * @param {Array} subtypes 鍙拌处璁板綍
+ * @param {Boolean} isSelfPatrol 鏄惁缁熻鑷贰鏌ョ被鍨�
+ */
+function _parse(subtypes, isSelfPatrol) {
+  const DEADLINEDAY = 10;
+  // 鏈堝害缁熻
+  let monthInfo = {
+    // 鍏ㄩ儴蹇呭~鏁�
+    totalMust: 0,
+    // 瀹屾垚蹇呭~鏁�
+    finishedMust: 0,
+    // 蹇呭~瀹屾垚鐧惧垎姣�
+    percent: 0,
+    // 鍏ㄩ儴閫夊~鏁�
+    totalSelect: 0,
+    // 瀹屾垚閫夊~鏁�
+    finishedSelect: 0,
+    // 鎻愪氦鐘舵�侊細鏈彁浜� | 閮ㄥ垎鎻愪氦 | 宸叉彁浜�
+    status: '',
+    // 閫炬湡澶╂暟
+    overtime: '',
+    // 寤鸿
+    suggestion: '',
+  };
+  let map = new Map();
+  for (let i = 0; i < subtypes.length; i++) {
+    const s = subtypes[i];
+    // 缁熻鑷贰鏌ユ椂锛岃繃婊ゆ櫘閫氬彴璐�
+    if (isSelfPatrol && s.ledgerTypeId != -1) continue;
+    // 缁熻鍙拌处鏃讹紝杩囨护鑷贰鏌�
+    if (!isSelfPatrol && s.ledgerTypeId == -1) continue;
+    // 鍒嗗埆缁熻蹇呭~鍜岄�夊~鐨勫畬鎴愭儏鍐�
+    if (s.needUpdate) {
+      monthInfo.totalMust++;
+      if (s.upLoad) monthInfo.finishedMust++;
+    } else {
+      monthInfo.totalSelect++;
+      if (s.upLoad) monthInfo.finishedSelect++;
+    }
+    refreshLedgerStatus(s);
+    if (!map.has(s.ledgerType)) map.set(s.ledgerType, []);
+    map.get(s.ledgerType).push(s);
+  }
+
+  //
+  if (monthInfo.finishedMust + monthInfo.finishedSelf == 0) {
+    monthInfo.status = '鏈彁浜�';
+    monthInfo.suggestion = '鍙拌处瀹屽叏鏈彁浜わ紝灏嗕弗閲嶅奖鍝嶈瘎浼扮粨鏋�';
+  } else if (monthInfo.finishedMust < monthInfo.totalMust) {
+    monthInfo.status = '閮ㄥ垎鎻愪氦';
+    monthInfo.suggestion = '鍙拌处閮ㄥ垎鏈彁浜わ紝浼氬奖鍝嶈瘎浼扮粨鏋�';
+  } else {
+    monthInfo.status = '宸叉彁浜�';
+    monthInfo.suggestion = '鍙拌处宸插叏閮ㄦ彁浜�';
+  }
+  monthInfo.overtime = moment().date() - DEADLINEDAY;
+  monthInfo.percent =
+    monthInfo.totalMust == 0
+      ? 0
+      : Math.round((monthInfo.finishedMust / monthInfo.totalMust) * 100);
+
+  //閫夐」鍗�
+  var t = [];
+  var p = [];
+  for (let item of map) {
+    let notUpload = 0;
+    item[1].forEach(l => {
+      if (l.needUpdate && !l.upLoad) {
+        notUpload++;
+      }
+    });
+    t.push({
+      name: item[0],
+      tag: notUpload,
+      total: item[1].length,
+    });
+    p.push(item[1]);
+  }
+
+  return { types: t, items: p, monthInfo };
+}
+// 缁熻鍙拌处涓婁紶鎯呭喌
+function parseLedgerStat(subtypes) {
+  return _parse(subtypes);
+}
+
+// 缁熻鑷贰鏌ヤ笂浼犳儏鍐�
+function parseSelfPatrol(subtypes) {
+  return _parse(subtypes, true);
 }
 
 function refreshLedgerStatus(s) {
-  if (s.upLoad) {
+  // if (s.ledgerFinished) {
+  //   s.badge = {
+  //     color: 'yellow',
+  //     count: '!',
+  //   };
+  //   s.opacity = 1;
+  // }
+  if (!s.needUpdate) {
     s.badge = {
-      color: 'green',
-      count: '鉁�',
-    };
-    s.opacity = 0.7;
-  } else if (s.ledgerFinished) {
-    s.badge = {
-      color: 'yellow',
-      count: '!',
+      color: '#00500079',
+      count: '閫夊~',
+      shape: 'bubble',
     };
     s.opacity = 1;
-  } else if (!s.needUpdate) {
-    s.badge = {
-      color: 'green',
-      count: '閫夊~',
-    };
-    s.opacity = 0.8;
   } else {
     s.badge = {
-      color: 'red',
-      count: '!',
+      color: 'ff00005d',
+      count: '蹇呭~',
+      shape: 'bubble',
     };
     s.opacity = 1;
   }
+  if (s.upLoad) {
+    s.badge.color = 'gray';
+    // s.badge.count += '鉁�';
+    s.opacity = 0.4;
+  }
 }
 
-export { parseLedgerStat, refreshLedgerStatus };
+export { parseLedgerStat, parseSelfPatrol, refreshLedgerStatus };
diff --git a/pages/home/home.js b/pages/home/home.js
index 4c6ee48..4a2b497 100644
--- a/pages/home/home.js
+++ b/pages/home/home.js
@@ -311,7 +311,7 @@
         break;
       case '5':
         wx.switchTab({
-          url: '/pages/mLedger/ledgerhome/ledgerhome',
+          url: '/pages/mLedger/home/index',
         });
         return;
       case '6':
diff --git a/pages/home/home.json b/pages/home/home.json
index 84fa880..43737b9 100644
--- a/pages/home/home.json
+++ b/pages/home/home.json
@@ -4,6 +4,8 @@
   "usingComponents": {
     "cp-notice": "/component/notice/notice",
     "c-schedule": "/pages/mService/cSchedule/cSchedule",
-    "c-schedule-today": "/pages/mService/cScheduletoday/index"
+    "c-schedule-today": "/pages/mService/cScheduletoday/index",
+    "c-practical-operation": "/pages/mService/cPracticaloperation/index",
+    "c-supervision-card": "/pages/mExtra/components/pSupervisionCard/index"
   }
 }
\ No newline at end of file
diff --git a/pages/home/home.wxml b/pages/home/home.wxml
index f829fd2..cd0b0a1 100644
--- a/pages/home/home.wxml
+++ b/pages/home/home.wxml
@@ -89,12 +89,18 @@
   <view class="page__bd" style="padding-top: 8px">
     <view class="schedule-wrap">
       <view style="margin-top: 4px">
+        <c-supervision-card></c-supervision-card>
+      </view>
+      <view style="margin-top: 4px">
         <c-schedule-today></c-schedule-today>
       </view>
       <c-schedule
         ledgerCompleted="{{ledgerCompleted}}"
         assessmentCompleted="{{assessmentCompleted}}"
       ></c-schedule>
+      <view style="margin-top: 4px">
+        <c-practical-operation></c-practical-operation>
+      </view>
     </view>
 
     <view class="fyui-panel" bindtap="goto" data-index="1">
diff --git a/pages/mAssessment/assessment/assessment.js b/pages/mAssessment/assessment/assessment.js
deleted file mode 100644
index d8d5982..0000000
--- a/pages/mAssessment/assessment/assessment.js
+++ /dev/null
@@ -1,320 +0,0 @@
-// pages/assessment/assessment.js
-const util = require('../../../utils/util')
-const echarts = require("../../../component/ec-canvas/echarts")
-const assessmentService = require("../../../service/assessmentservice")
-const moment = require('../../../utils/moment.min')
-const app = getApp()
-
-function setOption(chart, data) {
-  var option = {
-    // title: {
-    //   text: data.total, //涓绘爣棰樻枃鏈�
-    //   subtext: '娉ㄥ唽浼佷笟', //鍓爣棰樻枃鏈�
-    // },
-    color: ['#8BE7B7'],
-    grid: {
-      containLabel: true
-    },
-    tooltip: {
-      show: true,
-      trigger: 'axis'
-    },
-    xAxis: {
-      name: '鏈堜唤',
-      nameLocation: 'end',
-      type: 'category',
-      boundaryGap: false,
-      data: ['1鏈�', '2鏈�', '3鏈�', '4鏈�', '5鏈�', '6鏈�', '7鏈�', '8鏈�', '9鏈�', '10鏈�', '11鏈�', '12鏈�'],
-      nameTextStyle: {
-        fontSize: 10,
-      },
-      // axisTick: {
-      //   interval = '0'
-      // }
-    },
-    yAxis: {
-      name: '寰楀垎',
-      x: 'center',
-      type: 'value',
-      splitLine: {
-        lineStyle: {
-          type: 'dashed'
-        }
-      }
-      // show: false
-    },
-    grid: {
-      x: 30,
-      y: 30,
-      x2: 37,
-      y2: 60
-    },
-
-    series: [{
-      name: '璇勫垎',
-      type: 'line',
-      smooth: true,
-      areaStyle: {
-        color: {
-          type: 'linear',
-          x: 0.5,
-          y: 0,
-          x2: 0.5,
-          y2: 1,
-          colorStops: [{
-              offset: 0, color: '#28db74' // 0% 澶勭殑棰滆壊
-          }, {
-              offset: 1, color: '#dcfeea79' // 100% 澶勭殑棰滆壊
-          }],
-          opacity: 0.1,
-          global: false // 缂虹渷涓� false
-        }
-      },
-      data: data,
-    }]
-  };
-
-  chart.setOption(option);
-}
-
-Page({
-
-  /**
-   * 椤甸潰鐨勫垵濮嬫暟鎹�
-   */
-  data: {
-    ec: {
-      lazyLoad: true
-    },
-    //褰撴湀璇勫垎鎯呭喌
-    text1: "娴嬭瘎宸插紑濮�!",
-    text2: "璇峰敖蹇畬鎴愭祴璇�",
-    text3: "鍘绘祴璇�",
-    deadline: "----骞�--鏈�--鏃�",
-    score: undefined,
-    //鎶樼嚎鍥炬椂闂撮�夋嫨
-    planYear: "2000",
-    maxYear: "2000",
-    //褰撳墠鐨勮瘎鍒嗗懆鏈�
-    thisPeriod: '2000/1-1',
-    //璇勪及鍘嗗彶
-    historys: []
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
-   */
-  onLoad: function (options) {
-    this.setData({
-      navContentHeight: util.navContentHeight(),
-      statusBarHeight: wx.getSystemInfoSync().statusBarHeight
-    })
-    this._initPlanYear()
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
-   */
-  onReady: function () {
-    // setTimeout(() => {
-    // 鑾峰彇鎶樼嚎鍥剧粍浠�
-    this.ecComponent = this.selectComponent('#mychart-dom-line');
-    this.initChart()
-    // }, 1000);
-  },
-
-  /**
-   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
-   */
-  onShow: function () {
-    var that = this
-    wx.startPullDownRefresh({
-      success: (res) => {},
-      fail: (res) => {},
-      complete: (res) => {},
-    })
-  },
-
-  onPullDownRefresh(){
-    this.getHistoryPoint()
-
-  },
-
-  initChart: function () {
-    var data = {
-   
-    }
-    this.ecComponent.init((canvas, width, height, dpr) => {
-      // 鑾峰彇缁勪欢鐨� canvas銆亀idth銆乭eight 鍚庣殑鍥炶皟鍑芥暟
-      // 鍦ㄨ繖閲屽垵濮嬪寲鍥捐〃
-      const chart = echarts.init(canvas, null, {
-        width: width,
-        height: height,
-        devicePixelRatio: dpr // new
-      });
-      canvas.setChart(chart);
-      setOption(chart, data);
-
-      // 灏嗗浘琛ㄥ疄渚嬬粦瀹氬埌 this 涓婏紝鍙互鍦ㄥ叾浠栨垚鍛樺嚱鏁帮紙濡� dispose锛変腑璁块棶
-      this.chart = chart;
-
-      // 娉ㄦ剰杩欓噷涓�瀹氳杩斿洖 chart 瀹炰緥锛屽惁鍒欎細褰卞搷浜嬩欢澶勭悊绛�
-      return chart;
-    });
-  },
-
-  /**
-   * 鍒濆鍖栧勾浠�
-   */
-  _initPlanYear() {
-    var now = moment()
-    var year = now.year()
-    var period = `${now.year()}/${now.month()+1}-${now.month()+1}`
-    var deadline = now.endOf('month').format("YYYY骞碝M鏈圖D鏃�")
-    this.setData({
-      planYear: `${year}骞碻,
-      maxYear: year,
-      thisPeriod: period,
-      deadline: deadline
-    })
-  },
-
-  /**
-   * 鑾峰彇璇勪及鍘嗗彶璁板綍
-   */
-  getHistoryPoint() {
-    var that = this
-    assessmentService.getHistoryPoint(app.globalData.accessToken.userId, 1, {
-      success(data) {
-        //褰撴湀璇勫垎鎯呭喌
-        let lastOne = data[0]
-        let date = moment(lastOne.updateDate)
-        let period = `${date.year()}/${date.month()+1}-${date.month()+1}`
-        if (period == that.data.thisPeriod) {
-          that.setData({
-            score: lastOne.totalPoint,
-            text1: "",
-            text2: "鏈娴嬭瘎宸插畬鎴�",
-            text3: "鏌ョ湅璇︽儏",
-            hasScore: true
-          })
-        } else {
-          that.setData({
-            text1: "娴嬭瘎宸插紑濮�!",
-            text2: "璇峰敖蹇畬鎴愭祴璇�",
-            text3: "鍘绘祴璇�",
-            score: undefined,
-            hasScore: false
-          })
-        }
-
-        //鍘嗗彶璇勫垎鎯呭喌涓庢姌绾垮浘
-        let historyList = []
-        that.chartData = {}
-        data.forEach(d => {
-          //鍘嗗彶璁板綍
-          historyList.push({
-            score: d.totalPoint,
-            color: d.color,
-            rank: d.rank,
-            level: d.level,
-            period: d.period,
-            time: d.period.replace('/', '骞�').replace(/\-[0-9]+/, '鏈�'),
-            scoreId: d.tPGuid,
-            updateTime: moment(d.updateDate).format('YYYY-MM-DD hh:mm')
-          })
-
-          //鎶樼嚎鍥炬暟鎹�
-          let y = d.period.split('/')[0]
-          let key =  y + '骞�'
-          if (!that.chartData.hasOwnProperty(key)) {
-            that.chartData[key] = ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']
-            if (y == date.year() + '') {
-              let m = date.month()
-              for (let i = m; i <= 11; i++) {
-                that.chartData[key][i] = '-'
-              }
-            }
-          }
-          let monthGap = d.period.split('/')[1]
-          let startMonth = parseInt(monthGap.split('-')[0])
-          let endMonth = parseInt(monthGap.split('-')[1])
-          for (let i = startMonth; i <= endMonth; i++) {
-            that.chartData[key][i-1] = d.totalPoint
-          }
-        });
-        that.setData({
-          historys: historyList
-        })
-        setTimeout(() => {
-          setOption(that.chart, that.chartData[that.data.planYear]);
-        }, 500);
-      },
-      complete(res) {
-        wx.stopPullDownRefresh({
-          success: (res) => {},
-          fail: (res) => {},
-          complete: (res) => {},
-        })
-      }
-    })
-  },
-
-  /**
-   * 閫夋嫨璁″垝骞翠唤
-   */
-  bindYearChange(e) {
-    let y = e.detail.value
-    this.setData({
-      planYear: `${y}骞碻,
-    })
-    setOption(this.chart, this.chartData[this.data.planYear])
-  },
-
-  /**
-   * 椤甸潰璺宠浆
-   */
-  goto: function (e) {
-    var url = ""
-    var index = e.currentTarget.dataset.index
-    switch (index) {
-      case "0":
-        //鍘绘祴璇勬垨鑰呮煡鐪嬭鎯�
-        if (this.data.score) {
-          url = `/pages/mAssessment/gradereport/gradereport?period=${this.data.thisPeriod}`
-        } else {
-          url = `/pages/mAssessment/grade/grade?record=false`
-        }
-        break;
-      case "1":
-        //鍘嗗彶璇勪及璁板綍璇︽儏
-        var period = e.currentTarget.dataset.period
-        url = `/pages/mAssessment/gradereport/gradereport?period=${period}`
-        break;
-      case "2":
-        //纰虫帓鏀炬櫤鑳戒及绠�
-        url = ""
-        break;
-      case "3":
-        //鍏朵粬涓撻」鑷祴
-        url = ""
-        break;
-      case "4":
-        break;
-      case "5":
-        break;
-    }
-    if (url != "") {
-      wx.navigateTo({
-        url: url
-      })
-    } else {
-      wx.showToast({
-        title: '鍔熻兘鏁鏈熷緟',
-        duration: 1000,
-        icon: 'none',
-        mask: true,
-      })
-    }
-  }
-})
\ No newline at end of file
diff --git a/pages/mAssessment/assessment/chart.js b/pages/mAssessment/assessment/chart.js
new file mode 100644
index 0000000..3ef91d4
--- /dev/null
+++ b/pages/mAssessment/assessment/chart.js
@@ -0,0 +1,143 @@
+const echarts = require('../../../component/ec-canvas/echarts');
+
+/**
+ * 娴嬭瘎瓒嬪娍
+ */
+export const useChart = Behavior({
+  data: {
+    ec: {
+      lazyLoad: true,
+    },
+    //鎶樼嚎鍥炬椂闂撮�夋嫨
+    planYear: '2000',
+    maxYear: '2000',
+  },
+  ready() {
+    this.ecComponent = this.selectComponent('#mychart-dom-line');
+    this.initChart();
+  },
+  methods: {
+    initChart: function () {
+      var data = {};
+      this.ecComponent.init((canvas, width, height, dpr) => {
+        // 鑾峰彇缁勪欢鐨� canvas銆亀idth銆乭eight 鍚庣殑鍥炶皟鍑芥暟
+        // 鍦ㄨ繖閲屽垵濮嬪寲鍥捐〃
+        const chart = echarts.init(canvas, null, {
+          width: width,
+          height: height,
+          devicePixelRatio: dpr, // new
+        });
+        canvas.setChart(chart);
+        // setOption(chart, data);
+
+        // 灏嗗浘琛ㄥ疄渚嬬粦瀹氬埌 this 涓婏紝鍙互鍦ㄥ叾浠栨垚鍛樺嚱鏁帮紙濡� dispose锛変腑璁块棶
+        this.chart = chart;
+
+        // 娉ㄦ剰杩欓噷涓�瀹氳杩斿洖 chart 瀹炰緥锛屽惁鍒欎細褰卞搷浜嬩欢澶勭悊绛�
+        return chart;
+      });
+    },
+    /**
+     * 閫夋嫨璁″垝骞翠唤
+     */
+    bindYearChange(e) {
+      let y = e.detail.value;
+      this.setData({
+        planYear: `${y}骞碻,
+      });
+      setOption(this.chart, this.chartData[this.data.planYear]);
+    },
+
+    refreshChart(data) {
+      setOption(this.chart, data);
+    },
+  },
+});
+
+function setOption(chart, data) {
+  var option = {
+    color: ['#8BE7B7'],
+    grid: {
+      containLabel: true,
+    },
+    tooltip: {
+      show: true,
+      trigger: 'axis',
+    },
+    xAxis: {
+      name: '鏈堜唤',
+      nameLocation: 'end',
+      type: 'category',
+      boundaryGap: false,
+      data: [
+        '1鏈�',
+        '2鏈�',
+        '3鏈�',
+        '4鏈�',
+        '5鏈�',
+        '6鏈�',
+        '7鏈�',
+        '8鏈�',
+        '9鏈�',
+        '10鏈�',
+        '11鏈�',
+        '12鏈�',
+      ],
+      nameTextStyle: {
+        fontSize: 10,
+      },
+      // axisTick: {
+      //   interval = '0'
+      // }
+    },
+    yAxis: {
+      name: '寰楀垎',
+      x: 'center',
+      type: 'value',
+      splitLine: {
+        lineStyle: {
+          type: 'dashed',
+        },
+      },
+      // show: false
+    },
+    grid: {
+      x: 30,
+      y: 30,
+      x2: 37,
+      y2: 60,
+    },
+
+    series: [
+      {
+        name: '璇勫垎',
+        type: 'line',
+        smooth: true,
+        areaStyle: {
+          color: {
+            type: 'linear',
+            x: 0.5,
+            y: 0,
+            x2: 0.5,
+            y2: 1,
+            colorStops: [
+              {
+                offset: 0,
+                color: '#28db74', // 0% 澶勭殑棰滆壊
+              },
+              {
+                offset: 1,
+                color: '#dcfeea79', // 100% 澶勭殑棰滆壊
+              },
+            ],
+            opacity: 0.1,
+            global: false, // 缂虹渷涓� false
+          },
+        },
+        data: data,
+      },
+    ],
+  };
+
+  chart.setOption(option);
+}
diff --git a/pages/mAssessment/assessment/chart.wxml b/pages/mAssessment/assessment/chart.wxml
new file mode 100644
index 0000000..e31394e
--- /dev/null
+++ b/pages/mAssessment/assessment/chart.wxml
@@ -0,0 +1,30 @@
+<view style="margin-left: 10px; margin-top: 8px">娴嬭瘎瓒嬪娍</view>
+<view class="fyui-panel line-chart-card">
+  <view class="flex-h" style="padding: 4px">
+    <view></view>
+    <picker
+      bindchange="bindYearChange"
+      data-type="planYear"
+      value="{{planYear}}"
+      mode="date"
+      fields="year"
+      end="{{maxYear}}"
+    >
+      <view class="fyui-selector">
+        {{planYear}}
+        <mp-icon
+          icon="arrow"
+          class="icon-down"
+          size="10"
+          color="black"
+        ></mp-icon>
+      </view>
+    </picker>
+  </view>
+  <ec-canvas
+    id="mychart-dom-line"
+    canvas-id="mychart-line"
+    ec="{{ ec }}"
+  ></ec-canvas>
+  <!-- <template wx:else is="nodataPage"></template> -->
+</view>
diff --git a/pages/mAssessment/assessment/index.js b/pages/mAssessment/assessment/index.js
new file mode 100644
index 0000000..a93b294
--- /dev/null
+++ b/pages/mAssessment/assessment/index.js
@@ -0,0 +1,214 @@
+import { useChart, setOption } from './chart.js';
+const util = require('../../../utils/util');
+const assessmentService = require('../../../service/assessmentservice');
+const moment = require('../../../utils/moment.min');
+const app = getApp();
+
+Page({
+  behaviors: [useChart],
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+    //褰撴湀璇勫垎鎯呭喌
+    text1: '娴嬭瘎宸插紑濮�!',
+    text2: '璇峰敖蹇畬鎴愭祴璇�',
+    text3: '鍘绘祴璇�',
+    deadline: '----骞�--鏈�--鏃�',
+    score: undefined,
+
+    //褰撳墠鐨勮瘎鍒嗗懆鏈�
+    thisPeriod: '2000/1-1',
+    //璇勪及鍘嗗彶
+    historys: [],
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad: function (options) {
+    this.setData({
+      navContentHeight: util.navContentHeight(),
+      statusBarHeight: wx.getSystemInfoSync().statusBarHeight,
+    });
+    this._initPlanYear();
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow: function () {
+    var that = this;
+    wx.startPullDownRefresh({
+      success: res => {},
+      fail: res => {},
+      complete: res => {},
+    });
+  },
+
+  onPullDownRefresh() {
+    this.getHistoryPoint();
+  },
+
+  /**
+   * 鍒濆鍖栧勾浠�
+   */
+  _initPlanYear() {
+    var now = moment();
+    var year = now.year();
+    var period = `${now.year()}/${now.month() + 1}-${now.month() + 1}`;
+    var deadline = now.endOf('month').format('YYYY骞碝M鏈圖D鏃�');
+    this.setData({
+      planYear: `${year}骞碻,
+      maxYear: year,
+      thisPeriod: period,
+      deadline: deadline,
+    });
+  },
+
+  /**
+   * 鑾峰彇璇勪及鍘嗗彶璁板綍
+   */
+  getHistoryPoint() {
+    var that = this;
+    assessmentService.getHistoryPoint(app.globalData.accessToken.userId, 1, {
+      success(data) {
+        //褰撴湀璇勫垎鎯呭喌
+        let lastOne = data[0];
+        let date = moment(lastOne.updateDate);
+        let period = `${date.year()}/${date.month() + 1}-${date.month() + 1}`;
+        // fixme 2024.5.24 涓存椂娣诲姞闈欏畨鍖荤枟鏈烘瀯鐨勮瘎浼板懆鏈熶负1骞达紝鍚庣画鍐嶅仛瀹屽杽
+        const inPeriod =
+          app.globalData.userInfo.extension1 == '闈欏畨鍖�' &&
+          app.globalData.userInfo.extension2 == '9' &&
+          date.year() == moment().year();
+        if (period == that.data.thisPeriod || inPeriod) {
+          that.setData({
+            score: lastOne.totalPoint,
+            text1: '',
+            text2: '鏈娴嬭瘎宸插畬鎴�',
+            text3: '鏌ョ湅璇︽儏',
+            hasScore: true,
+          });
+        } else {
+          that.setData({
+            text1: '娴嬭瘎宸插紑濮�!',
+            text2: '璇峰敖蹇畬鎴愭祴璇�',
+            text3: '鍘绘祴璇�',
+            score: undefined,
+            hasScore: false,
+          });
+        }
+
+        //鍘嗗彶璇勫垎鎯呭喌涓庢姌绾垮浘
+        let historyList = [];
+        that.chartData = {};
+        data.forEach(d => {
+          //鍘嗗彶璁板綍
+          historyList.push({
+            score: d.totalPoint,
+            color: d.color,
+            rank: d.rank,
+            level: d.level,
+            period: d.period,
+            time: d.period.replace('/', '骞�').replace(/\-[0-9]+/, '鏈�'),
+            scoreId: d.tPGuid,
+            updateTime: moment(d.updateDate).format('YYYY-MM-DD hh:mm'),
+          });
+
+          //鎶樼嚎鍥炬暟鎹�
+          let y = d.period.split('/')[0];
+          let key = y + '骞�';
+          if (!that.chartData.hasOwnProperty(key)) {
+            that.chartData[key] = [
+              '0',
+              '0',
+              '0',
+              '0',
+              '0',
+              '0',
+              '0',
+              '0',
+              '0',
+              '0',
+              '0',
+              '0',
+            ];
+            if (y == date.year() + '') {
+              let m = date.month();
+              for (let i = m; i <= 11; i++) {
+                that.chartData[key][i] = '-';
+              }
+            }
+          }
+          let monthGap = d.period.split('/')[1];
+          let startMonth = parseInt(monthGap.split('-')[0]);
+          let endMonth = parseInt(monthGap.split('-')[1]);
+          for (let i = startMonth; i <= endMonth; i++) {
+            that.chartData[key][i - 1] = d.totalPoint;
+          }
+        });
+        that.setData({
+          historys: historyList,
+        });
+        setTimeout(() => {
+          that.refreshChart(that.chartData[that.data.planYear]);
+        }, 500);
+      },
+      complete(res) {
+        wx.stopPullDownRefresh({
+          success: res => {},
+          fail: res => {},
+          complete: res => {},
+        });
+      },
+    });
+  },
+
+  /**
+   * 椤甸潰璺宠浆
+   */
+  goto: function (e) {
+    var url = '';
+    var index = e.currentTarget.dataset.index;
+    switch (index) {
+      case '0':
+        //鍘绘祴璇勬垨鑰呮煡鐪嬭鎯�
+        if (this.data.score) {
+          url = `/pages/mAssessment/gradereport/gradereport?period=${this.data.thisPeriod}`;
+        } else {
+          url = `/pages/mAssessment/grade/grade?record=false`;
+        }
+        break;
+      case '1':
+        //鍘嗗彶璇勪及璁板綍璇︽儏
+        var period = e.currentTarget.dataset.period;
+        url = `/pages/mAssessment/gradereport/gradereport?period=${period}`;
+        break;
+      case '2':
+        //纰虫帓鏀炬櫤鑳戒及绠�
+        url = '';
+        break;
+      case '3':
+        //鍏朵粬涓撻」鑷祴
+        url = '';
+        break;
+      case '4':
+        break;
+      case '5':
+        break;
+    }
+    if (url != '') {
+      wx.navigateTo({
+        url: url,
+      });
+    } else {
+      wx.showToast({
+        title: '鍔熻兘鏁鏈熷緟',
+        duration: 1000,
+        icon: 'none',
+        mask: true,
+      });
+    }
+  },
+});
diff --git a/pages/mAssessment/assessment/index.json b/pages/mAssessment/assessment/index.json
new file mode 100644
index 0000000..2419e5a
--- /dev/null
+++ b/pages/mAssessment/assessment/index.json
@@ -0,0 +1,10 @@
+{
+  "navigationBarTitleText": "鑷祴鏅鸿瘎",
+  "enablePullDownRefresh":true,
+  "usingComponents": {
+    "cp-progress": "/component/progress/progress",
+    "ec-canvas": "/component/ec-canvas/ec-canvas",
+    "mp-icon": "/component/icon/icon"
+  },
+  "navigationBarBackgroundColor": "#57E4CB"
+}
\ No newline at end of file
diff --git a/pages/mAssessment/assessment/index.wxml b/pages/mAssessment/assessment/index.wxml
new file mode 100644
index 0000000..b77fce9
--- /dev/null
+++ b/pages/mAssessment/assessment/index.wxml
@@ -0,0 +1,97 @@
+<import src="/template/nodata.wxml"></import>
+
+<view class="page">
+  <!-- <view class="banner-bg"></view> -->
+
+  <!-- <view style="padding-top: {{statusBarHeight}}px;" class="statusbar-title">
+    <view style="line-height: {{navContentHeight - statusBarHeight}}px;">
+      <text>淇$敤鏅鸿瘎</text>
+    </view>
+  </view> -->
+
+  <view class="page__hd flex-h">
+    <view class="flex-v">
+      <view>
+        <view class="title">{{text1}}</view>
+        <view class="title">{{text2}}</view>
+        <view class="tag">娴嬭瘎鎴鏃堕棿锛歿{deadline}}</view>
+        <image wx:if="{{hasScore}}" src="/res/icons/complete.png" class="t-image" mode="aspectFit"></image>
+      </view>
+      <view class="btn" bindtap="goto" data-index="0">{{text3}}</view>
+    </view>
+    <view class="progress" style="margin-right: 0px;">
+      <cp-progress progress="{{score}}" />
+    </view>
+  </view>
+
+  <view class="page__bd">
+    <view style="margin-left: 10px;">鍒嗙被娴嬭瘎</view>
+    <view class="top-card top-card_main" bindtap="goto" data-index="0">
+      <image src="/res/icons/ass_3.png" mode="aspectFit"></image>
+      <view>
+        <view class="top-card__name">瀹堟硶鑷祴鏅鸿瘎</view>
+        <view class="top-card__tag">鐐瑰嚮杩涜娴嬭瘎 ></view>
+      </view>
+      <!-- <mp-icon icon="arrow" class="" size="15" color="white"></mp-icon> -->
+    </view>
+    <view class="flex-h">
+      <view class="flex-h_block" bindtap="goto" data-index="2">
+        <view class="top-card">
+          <image src="/res/icons/ass_2.png" mode="aspectFit"></image>
+          <view>
+            <view class="top-card__name">纰虫帓鏀炬櫤鑳戒及绠�</view>
+            <view class="top-card__tag">鐐瑰嚮杩涜娴嬭瘎 ></view>
+          </view>
+        </view>
+      </view>
+      <view class="flex-h_block" bindtap="goto" data-index="3">
+        <view class="top-card top-card_2">
+          <image src="/res/icons/ass_1.png" mode="aspectFit"></image>
+          <view>
+            <view class="top-card__name">鍏朵粬涓撻」鑷祴</view>
+            <view class="top-card__tag">鐐瑰嚮杩涜娴嬭瘎 ></view>
+          </view>
+        </view>
+      </view>
+    </view>
+    <include src="./chart.wxml" />
+
+    <view class="fyui-cell fyui-cell_select title">
+      <view class="fyui-cell__bd">鍘嗗彶娴嬭瘎</view>
+      <view class="fyui-cell__ft">鏌ョ湅鏇村</view>
+    </view>
+
+    <block wx:if="{{historys.length > 0}}">
+      <view wx:for="{{historys}}" wx:key="index" data-index="index" class="flex-h" style="align-items: flex-start;">
+        <view class="history_icon">
+          <view class="history_icon_1">
+            <view></view>
+          </view>
+          <view class="history_icon_2"></view>
+        </view>
+        <view style="flex: 1;">
+          <view class="history_time">{{item.time}}</view>
+          <view class="h-cell fyui-panel">
+            <view class="h-tag">{{item.updateTime}}</view>
+            <view class="h-line_1">
+              <view class="flex-h">
+                <view class="h-score" style="background-color: {{item.color}};">
+                  {{item.score}}
+                </view>
+                <view class="h-rank">
+                  <view>椋庨櫓鎺掑悕锛歿{item.rank}}</view>
+                  <view>椋庨櫓绛夌骇锛歿{item.level}}</view>
+                </view>
+              </view>
+              <view data-id="{{item.scoreId}}" class="h-btn" bindtap="goto" data-index="1" data-period="{{item.period}}">鍘荤湅鐪�</view>
+            </view>
+          </view>
+        </view>
+      </view>
+    </block>
+
+    <template wx:else is="nodataPage"></template>
+  </view>
+  <view class="page__ft">
+  </view>
+</view>
\ No newline at end of file
diff --git a/pages/mAssessment/assessment/index.wxss b/pages/mAssessment/assessment/index.wxss
new file mode 100644
index 0000000..9640adb
--- /dev/null
+++ b/pages/mAssessment/assessment/index.wxss
@@ -0,0 +1,191 @@
+.banner-bg {
+  position: fixed;
+  width: 100%;
+  height: 50vh;
+  background: linear-gradient(to bottom, #57E4CB, #bbf3eb);
+  /* color: #dcfeea79; */
+}
+
+.page__hd {
+  background: linear-gradient(to bottom, #57E4CB, #bbf3eb);
+  padding-bottom: 4px;
+}
+
+.page__hd .title {
+  font-size: 16px;
+  font-weight: 600;
+  margin-top: 8px;
+}
+
+.page__hd .tag {
+  font-size: 10px;
+  color: #55A37D;
+  margin-top: 8px;
+}
+
+.page__hd .t-image {
+  width: 100px;
+  height: 100px;
+}
+
+.page__hd .btn {
+  border-radius: 20px;
+  line-height: 20px;
+  background-color: #52be85;
+  padding: 8px 4px;
+  text-align: center;
+  color: white;
+}
+
+.line-chart-card {
+  position: relative;
+  height: 30vh;
+  padding: 0 0 8px 0;
+}
+
+.h-cell {
+  padding: 16px 10px;
+}
+
+.h-score {
+  background-color: #F0AE4E;
+  border-radius: 50%;
+  padding: 8px;
+  width: 20px;
+  height: 20px;
+  color: white;
+  font-size: 12px;
+  text-align: center;
+}
+
+.h-line_1 {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.h-rank {
+  font-size: 14px;
+  margin-left: 4px;
+}
+
+.h-line_2 {
+  display: flex;
+  justify-content: space-between;
+  font-size: 10px;
+  color: var(--fyui-text-color_3);
+  padding-left: 40px;
+  padding-top: 4px;
+  margin-top: 4px;
+  border-top: 1px rgba(202, 202, 202, 0.295) solid;
+  align-items: center;
+}
+
+.h-btn {
+  border-radius: 4px;
+  background: linear-gradient(to right, #6DF1A9, #62EBCF);
+  padding: 4px 16px;
+  color: white;
+  font-size: 14px;
+}
+
+.h-tag{
+  position: absolute;
+  color: var(--fyui-text-color_3);
+  font-size: 12px;
+  text-align: end;
+  bottom: 0;
+  right: 8px;
+}
+
+.flex-h_block {
+  flex: 1;
+}
+
+.top-card {
+  position: relative;
+  border-radius: 4px;
+  /* background: linear-gradient(90deg, #A3D9F5, #88E1EC); */
+  background-color: rgb(199, 199, 199);
+  color: white;
+  padding: 8px;
+  margin-left: 10px;
+  margin-right: 2px;
+  display: flex;
+  white-space: nowrap;
+  text-overflow: ellipsis;
+}
+
+.top-card_2 {
+  /* background: linear-gradient(90deg, #87CEB2, #6CD398); */
+  background-color: rgb(199, 199, 199);
+  margin-left: 2px;
+  margin-right: 10px;
+}
+
+.top-card_main {
+  background: linear-gradient(90deg, #55E2C9, #b6e9dc);
+  margin-left: 10px;
+  margin-right: 10px;
+  margin-bottom: 4px;
+}
+
+.top-card>image {
+  width: 40px;
+  height: 40px;
+  margin-right: 10px;
+}
+
+.top-card .top-card__tag {
+  /* text-align: end; */
+  font-size: 12px;
+}
+
+.top-card .top-card__name {
+  font-size: 14px;
+  /* width: 100%; */
+  /* font-weight: 600; */
+  /* text-align: center; */
+  /* margin: 16px; */
+}
+
+.history_time{
+  /* background-color: red; */
+  margin-left: 10px;
+  font-size: 14px;
+  font-weight: 550;
+}
+
+.history_icon {
+  width: 10vw;
+  height: 100%;
+  display: flex;
+  flex-direction: column;
+  justify-content: flex-start;
+  align-items: center;
+}
+
+.history_icon .history_icon_1 {
+  width: 22px;
+  height: 22px;
+  background-color: #8DF1E0;
+  border-radius: 50%;
+  opacity: 0.2;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+.history_icon .history_icon_1>view {
+  width: 11px;
+  height: 11px;
+  background: #1addbd;
+  border-radius: 50%;
+  z-index: 10;
+}
+
+.history_icon .history_icon_2 {
+  width: 0px;
+  height: 100px;
+  border: 1px dashed #80EFDC;
+}
\ No newline at end of file
diff --git a/pages/mAssessment/grade/grade.js b/pages/mAssessment/grade/grade.js
index 21ffc81..bcc5c89 100644
--- a/pages/mAssessment/grade/grade.js
+++ b/pages/mAssessment/grade/grade.js
@@ -9,56 +9,6 @@
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
   data: {
-    // {
-    //   title1: '鍦ㄧ嚎鐩戞祴璁惧',
-    //   sub1: [{
-    //     title2: '璁惧',
-    //     group: 0,
-    //     sub2: [{
-    //         content: '璁惧鏈畨瑁�',
-    //         score: '-10',
-    //         select: false
-    //       },
-    //       {
-    //         content: '璁惧绉佽嚜鎷嗛櫎',
-    //         score: '-10',
-    //         select: false
-    //       },
-    //       {
-    //         content: '璁惧鏈繍琛�',
-    //         score: '-10',
-    //         select: false
-    //       }, {
-    //         content: '璁惧鏈繍缁�',
-    //         score: '-10',
-    //         select: false
-    //       }
-    //     ]
-    //   }, {
-    //     title2: '鏁版嵁',
-    //     group: 1,
-    //     sub2: [{
-    //         content: '鏁版嵁鏈秴鏍�',
-    //         score: '-10',
-    //         select: false
-    //       },
-    //       {
-    //         content: '鏁版嵁閮ㄥ垎瓒呮爣',
-    //         score: '-10',
-    //         select: false
-    //       },
-    //       {
-    //         content: '鏁版嵁澶ч噺瓒呮爣',
-    //         score: '-10',
-    //         select: false
-    //       }, {
-    //         content: '鏁版嵁涓ラ噸瓒呮爣',
-    //         score: '-10',
-    //         select: false
-    //       }
-    //     ]
-    //   }],
-    // }
     evaluations: []
   },
 
diff --git a/pages/mAssessment/index/index.js b/pages/mAssessment/index/index.js
new file mode 100644
index 0000000..0ed7fdd
--- /dev/null
+++ b/pages/mAssessment/index/index.js
@@ -0,0 +1,66 @@
+// pages/mAssessment/index/index.js
+Page({
+
+  /**
+   * 椤甸潰鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
+   */
+  onLoad(options) {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍒濇娓叉煋瀹屾垚
+   */
+  onReady() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鏄剧ず
+   */
+  onShow() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
+   */
+  onHide() {
+
+  },
+
+  /**
+   * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
+   */
+  onUnload() {
+
+  },
+
+  /**
+   * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
+   */
+  onPullDownRefresh() {
+
+  },
+
+  /**
+   * 椤甸潰涓婃媺瑙﹀簳浜嬩欢鐨勫鐞嗗嚱鏁�
+   */
+  onReachBottom() {
+
+  },
+
+  /**
+   * 鐢ㄦ埛鐐瑰嚮鍙充笂瑙掑垎浜�
+   */
+  onShareAppMessage() {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/mAssessment/index/index.json b/pages/mAssessment/index/index.json
new file mode 100644
index 0000000..8835af0
--- /dev/null
+++ b/pages/mAssessment/index/index.json
@@ -0,0 +1,3 @@
+{
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mAssessment/index/index.wxml b/pages/mAssessment/index/index.wxml
new file mode 100644
index 0000000..9e95c08
--- /dev/null
+++ b/pages/mAssessment/index/index.wxml
@@ -0,0 +1,2 @@
+<!--pages/mAssessment/index/index.wxml-->
+<text>pages/mAssessment/index/index.wxml</text>
\ No newline at end of file
diff --git a/pages/mAssessment/index/index.wxss b/pages/mAssessment/index/index.wxss
new file mode 100644
index 0000000..da58bcb
--- /dev/null
+++ b/pages/mAssessment/index/index.wxss
@@ -0,0 +1 @@
+/* pages/mAssessment/index/index.wxss */
\ No newline at end of file
diff --git a/pages/mExtra/components/pSupervisionCard/index.js b/pages/mExtra/components/pSupervisionCard/index.js
new file mode 100644
index 0000000..7406857
--- /dev/null
+++ b/pages/mExtra/components/pSupervisionCard/index.js
@@ -0,0 +1,30 @@
+import fetchSubtask from '../../pSupervisionSummary/fetchSubtask';
+
+Component({
+  behaviors: [fetchSubtask],
+  properties: {},
+  data: {
+    latestSubtask: undefined,
+  },
+  methods: {
+    _onFetchDone() {
+      const { subtasks } = this.data;
+      if (subtasks.length > 0) {
+        //绛涢�夐涓湭瀹屾垚鏁存敼鐨勮褰曪紝浣滀负鎻愰啋灞曠ず
+        for (let i = 0; i < subtasks.length; i++) {
+          const s = subtasks[i];
+          if (s.proCheckedNum > s.changeNum) {
+            this.setData({ latestSubtask: s });
+            break;
+          }
+        }
+      }
+    },
+
+    goto() {
+      wx.navigateTo({
+        url: '/pages/mExtra/pSupervisionSummary/index',
+      });
+    },
+  },
+});
diff --git a/pages/mExtra/components/pSupervisionCard/index.json b/pages/mExtra/components/pSupervisionCard/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/pages/mExtra/components/pSupervisionCard/index.json
@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mExtra/components/pSupervisionCard/index.wxml b/pages/mExtra/components/pSupervisionCard/index.wxml
new file mode 100644
index 0000000..ab3e3e9
--- /dev/null
+++ b/pages/mExtra/components/pSupervisionCard/index.wxml
@@ -0,0 +1,13 @@
+<wxs src="../../time.wxs" module="_" />
+
+<view wx:if="{{latestSubtask}}" class="change-card" bind:tap="goto">
+  <view class="change-category">
+    <t-icon name="/res/icons/cq_illegal.png" size="36rpx" />
+    <text>闂鏁存敼</text>
+  </view>
+  <view class="change-item">
+    <view class="sub-title">{{_.formatYM(latestSubtask.stPlanTime)}}</view>
+    <view>闂锛歿{latestSubtask.proCheckedNum}}</view>
+    <t-icon name="chevron-right" size="36rpx" />
+  </view>
+</view>
diff --git a/pages/mExtra/components/pSupervisionCard/index.wxss b/pages/mExtra/components/pSupervisionCard/index.wxss
new file mode 100644
index 0000000..1eaccc2
--- /dev/null
+++ b/pages/mExtra/components/pSupervisionCard/index.wxss
@@ -0,0 +1,26 @@
+.change-card {
+  position: relative;
+  /* background: linear-gradient(0deg, #e9c07f, #F8BD6B, #FFAC38); */
+  /* padding: 8px; */
+  background-color: white;
+  color: var(--fyui-text-color_1);
+  border-radius: 6px;
+  box-shadow: 1px 1px 3px rgba(0, 0, 0, .4);
+}
+
+.change-category {
+  display: flex;
+  background: linear-gradient(0deg, #ffffff, #E2EFFF, #c5dfff);
+  align-items: center;
+  font-size: 30rpx;
+  padding: 8px;
+  border-radius: 6px 6px 0 0;
+}
+
+.change-item {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  font-size: 14px;
+  padding: 8px;
+}
\ No newline at end of file
diff --git a/pages/mExtra/pSupervisionSummary/fetchSubtask.js b/pages/mExtra/pSupervisionSummary/fetchSubtask.js
new file mode 100644
index 0000000..93dfb2f
--- /dev/null
+++ b/pages/mExtra/pSupervisionSummary/fetchSubtask.js
@@ -0,0 +1,93 @@
+import moment from '../../../utils/moment.min';
+const taskservice = require('../../../service/taskservice');
+const userservice = require('../../../service/userservice');
+const app = getApp();
+
+/**
+ * 鑾峰彇鐢ㄦ埛琚贰鏌ョ洃绠′换鍔¤褰�
+ */
+module.exports = Behavior({
+  properties: {},
+  data: {
+    userId: app.globalData.accessToken.userId,
+    scene: undefined,
+    startTime: '',
+    endTime: '',
+    subtasks: [],
+  },
+  lifetimes: {
+    ready: function () {
+      this.init();
+    },
+  },
+  methods: {
+    init() {
+      // 鑾峰彇鏈�杩戜笁涓湀鐨勮捣姝㈡椂闂�
+      const endTime = moment().endOf('month');
+      const startTime = moment().subtract(2, 'month').startOf('month');
+      this.setData({
+        startTime: this.timeForamt(startTime),
+        endTime: this.timeForamt(endTime),
+      });
+      this.fetchScene();
+    },
+
+    timeForamt(time) {
+      if (time == undefined) {
+        return time;
+      }
+      if (typeof time === 'string') {
+        time = moment(time);
+      }
+      return time.format('YYYY-MM-DD HH:mm:ss');
+    },
+
+    /**
+     * 鏍规嵁鐢ㄦ埛id浠庨缇界洃绠$郴缁熶腑鑾峰彇瀵瑰簲鐢ㄦ埛鐨勫満鏅俊鎭�
+     */
+    fetchScene() {
+      userservice.getSceneByUserId(this.data.userId, {
+        success: data => {
+          // 鍒ゆ柇鍦烘櫙淇℃伅鏄惁瀛樺湪
+          if (data) {
+            this.setData({ scene: data });
+            this.fetchSubtask();
+          } else {
+            this._onFetchDone();
+          }
+        },
+        fail: err => {
+          this._onFetchDone();
+        },
+        complete: () => {},
+      });
+    },
+
+    /**
+     * 鑾峰彇浼佷笟鐢ㄦ埛鐨勮宸℃煡浠诲姟璁板綍
+     */
+    fetchSubtask() {
+      taskservice.getSubtaskByScene(
+        {
+          sceneId: this.data.scene.guid,
+          startTime: this.data.startTime,
+          endTime: this.data.endTime,
+        },
+        {
+          success: data => {
+            data.forEach(d => {
+              d.stPlanTime = this.timeForamt(d.stPlanTime);
+            });
+            this.setData({ subtasks: data });
+          },
+          fail: err => {},
+          complete: () => {
+            this._onFetchDone();
+          },
+        },
+      );
+    },
+
+    _onFetchDone() {},
+  },
+});
diff --git a/pages/mExtra/pSupervisionSummary/index.js b/pages/mExtra/pSupervisionSummary/index.js
new file mode 100644
index 0000000..8b78fba
--- /dev/null
+++ b/pages/mExtra/pSupervisionSummary/index.js
@@ -0,0 +1,38 @@
+import fetchSubtask from './fetchSubtask';
+import bLoadingStatus from '../../../base/behaviors/bLoadingStatus';
+import bLoadingToast from '../../../base/behaviors/bLoadingToast';
+
+Page({
+  behaviors: [fetchSubtask, bLoadingStatus, bLoadingToast],
+  data: {},
+
+  onLoad(options) {
+    this.setData({ loading: true });
+  },
+
+  onPullDownRefresh() {
+    this.fetchScene();
+  },
+
+  _onFetchDone() {
+    this.setData({ loading: false });
+  },
+
+  /**
+   * 璺宠浆闂璇︽儏鐣岄潰
+   */
+  gotoProblems(e) {
+    const index = e.currentTarget.dataset.index;
+    const subtask = this.data.subtasks[index];
+    let t = new Date();
+    t = t.getTime();
+    wx.navigateTo({
+      url: `/pages/mExtra/pSupervisionchange/pSupervisionchange?subTaskId=${subtask.stGuid}&time=${t}`,
+      events: {
+        uploadDone: data => {
+          this.fetchScene();
+        },
+      },
+    });
+  },
+});
diff --git a/pages/mExtra/pSupervisionSummary/index.json b/pages/mExtra/pSupervisionSummary/index.json
new file mode 100644
index 0000000..39d63aa
--- /dev/null
+++ b/pages/mExtra/pSupervisionSummary/index.json
@@ -0,0 +1,7 @@
+{
+  "navigationBarTitleText": "闂鏁存敼",
+  "enablePullDownRefresh":true,
+  "navigationBarBackgroundColor": "#009e91",
+  "navigationBarTextStyle": "white",
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mExtra/pSupervisionSummary/index.wxml b/pages/mExtra/pSupervisionSummary/index.wxml
new file mode 100644
index 0000000..77e192d
--- /dev/null
+++ b/pages/mExtra/pSupervisionSummary/index.wxml
@@ -0,0 +1,76 @@
+<import src="/template/nodata.wxml"></import>
+<wxs src="../time.wxs" module="_" />
+
+<view class="page">
+  <view class="banner-bg"></view>
+  <template wx:if="{{loading}}" is="nodataPage"></template>
+  <block wx:else>
+    <view wx:if="{{scene}}" class="page__hd">
+      <view class="title">{{scene.name}}</view>
+      <view class="sub-title"
+        >{{'[' + scene.type + '] ' + scene.districtname + scene.location}}</view
+      >
+    </view>
+    <view class="page__bd">
+      <view class="card-subtask">
+        <view
+          >{{_.formatYM(startTime) + '鑷�' + _.formatYM(endTime) +
+          '闂缁熻'}}</view
+        >
+        <template is="nodataPage"></template>
+      </view>
+      <view class="title">
+        <image src="/res/icons/ass_1.png" alt="鐩戠淇℃伅" mode="aspectFit" />
+        鐩戠淇℃伅
+      </view>
+      <block wx:if="{{subtasks.length > 0}}">
+        <block wx:for="{{subtasks}}" wx:key="index">
+          <view class="sub-title">{{_.formatYM(item.stPlanTime)}}</view>
+          <view class="card-subtask">
+            <view
+              class="flex-h"
+              style="justify-content: space-between; align-items: flex-start"
+            >
+              <image
+                style="width: 80px; height: 80px"
+                src="/res/icons/ic_supervised.png"
+                mode="aspectFit"
+              />
+              <view
+                class="flex-v"
+                style="flex: 1; height: 80px; justify-content: space-between"
+              >
+                <view class="flex-h">
+                  <view class="text-1">{{_.formatYMD(item.stPlanTime)}}</view>
+                  <view class="text-2">{{item.stStatus}}</view>
+                </view>
+
+                <view
+                  class="flex-h"
+                  style="align-items: center; margin-top: 4px"
+                >
+                  <view class="flex-h" style="flex: 0.6">
+                    <!-- <view>闂鏁帮細{{item.proNum}}</view> -->
+                    <view class="text-2">闂锛歿{item.proCheckedNum}}涓�</view>
+                    <view class="text-2">鏁存敼锛歿{item.changeNum}}涓�</view>
+                    <!-- <view>瀹℃牳锛歿{item.changeCheckedNum}}</view> -->
+                  </view>
+                  <button
+                    bindtap="gotoProblems"
+                    disabled="{{item.stStatus != '宸茬粨鏉�'}}"
+                    data-index="{{index}}"
+                  >
+                    鍘绘暣鏀�
+                  </button>
+                </view>
+              </view>
+            </view>
+          </view>
+        </block>
+        <view class="load-more">鈥斺�� 鏈�澶氬睍绀鸿繎涓変釜鏈堢殑鎯呭喌 鈥斺��</view>
+      </block>
+      <template wx:else is="nodataPage"></template>
+    </view>
+  </block>
+  <view class="page__ft"></view>
+</view>
diff --git a/pages/mExtra/pSupervisionSummary/index.wxss b/pages/mExtra/pSupervisionSummary/index.wxss
new file mode 100644
index 0000000..d6485b5
--- /dev/null
+++ b/pages/mExtra/pSupervisionSummary/index.wxss
@@ -0,0 +1,77 @@
+.banner-bg {
+  position: fixed;
+  width: 100%;
+  height: 100vh;
+  background: linear-gradient(#009e91, #00c4b3);
+}
+
+.title {
+  color: white;
+  margin-left: 4px;
+  margin-right: 4px;
+  font-size: 18px;
+  font-weight: 600;
+  margin-top: 8px;
+  margin-bottom: 4px;
+  display: flex;
+  align-items: center;
+}
+
+.title image{
+  width: 24px;
+  height: 24px;
+}
+
+.sub-title {
+  color: white;
+  margin-left: 4px;
+  margin-right: 4px;
+  font-size: 14px;
+  margin-top: 8px;
+  margin-bottom: 4px;
+}
+
+.card-subtask {
+  position: relative;
+  color: #009e91;
+  background-color: rgba(255, 255, 255, 0.918);
+  margin: 4px 4px;
+  border-radius: 4px;
+  padding: 4px;
+  font-size: 14px;
+}
+
+.text-1 {
+  font-size: 16px;
+  font-weight: 600;
+}
+
+.text-2 {
+  color: var(--fyui-btn-color_1);
+}
+
+button {
+  white-space: nowrap;
+  background-color: var(--fyui-btn-color_1);
+  margin-right: 0px !important;
+  max-width: 60px;
+  font-size: 12px;
+  padding: 8px;
+  color: white;
+  position: relative;
+}
+
+.no-data {
+  height: initial;
+}
+
+.no-data image {
+  margin-top: initial;
+}
+
+.load-more {
+  text-align: center;
+  font-size: 12px;
+  color: var(--fyui-BG_1);
+  padding: 8px;
+}
\ No newline at end of file
diff --git a/pages/mExtra/pSupervisionchange/pSupervisionchange.js b/pages/mExtra/pSupervisionchange/pSupervisionchange.js
index 35b755b..9eb19bc 100644
--- a/pages/mExtra/pSupervisionchange/pSupervisionchange.js
+++ b/pages/mExtra/pSupervisionchange/pSupervisionchange.js
@@ -1,8 +1,8 @@
 // pages/mExtra/pSupervisionchange/pSupervisionchange.js
-import moment from '../../../utils/moment.min'
-import bLoadingStatus from '../../../base/behaviors/bLoadingStatus'
-import bLoadingToast from '../../../base/behaviors/bLoadingToast'
-const taskservice = require('../../../service/taskservice')
+import moment from '../../../utils/moment.min';
+import bLoadingStatus from '../../../base/behaviors/bLoadingStatus';
+import bLoadingToast from '../../../base/behaviors/bLoadingToast';
+const taskservice = require('../../../service/taskservice');
 
 Page({
   behaviors: [bLoadingStatus, bLoadingToast],
@@ -16,7 +16,7 @@
     subTask: {},
     problemList: [],
 
-    previewImageUrls:[],
+    previewImageUrls: [],
     previewCurrent: 0,
     showPreview: false,
   },
@@ -27,130 +27,135 @@
   onLoad(options) {
     console.log(options);
     if (options.time) {
-      let now = new Date()
-      now = now.getTime()
-      if (now - options.time <= (1000 * 60 * 60 * 24 * 2)) {
+      let now = new Date();
+      now = now.getTime();
+      if (now - options.time <= 1000 * 60 * 60 * 24 * 2) {
         this.setData({
           enable: true,
-        })
+        });
         if (options.subTaskId) {
-          this.sId = options.subTaskId
-          this.getSubtask()
-          this.getProblems()
+          this.sId = options.subTaskId;
+          this.getSubtask();
+          this.getProblems();
         } else {
           this.setData({
             enable: false,
             reason: '璇ュ贰鏌ヤ换鍔″凡澶辨晥',
-          })
+          });
         }
       }
+    } else {
+      this.setData({
+        enable: true,
+      });
+      this.sId = '6tsjAYdt0EUGxsdU';
+      this.getSubtask();
+      this.getProblems();
     }
-    // this.sId = 'TUIk7Jf3UKmaZM90'
-    // this.getSubtask()
-    // this.getProblems()
   },
 
   onShow() {
     wx.hideHomeButton({
-      success: (res) => {},
-      fail: (res) => {},
-      complete: (res) => {},
-    })
+      success: res => {},
+      fail: res => {},
+      complete: res => {},
+    });
   },
 
   getSubtask() {
-    var that = this
+    var that = this;
     taskservice.getSubtask(this.sId, {
       success(data) {
-        data.planstarttime = moment(data.planstarttime).format('YYYY骞碝M鏈圖D鏃�')
+        data.planstarttime = moment(data.planstarttime).format(
+          'YYYY骞碝M鏈圖D鏃�',
+        );
         that.setData({
-          subTask: data
-        })
+          subTask: data,
+        });
       },
-      fail(err) {
-      },
-      complete() {
-      }
-    })
+      fail(err) {},
+      complete() {},
+    });
   },
 
   getProblems() {
-    var that = this
-    this.setData({loading: true})
+    var that = this;
+    this.setData({ loading: true });
     taskservice.getProblem(this.sId, {
       success(data) {
         data.forEach(d => {
-          d.proPics = []
-          d.changePics = []
+          d.proPics = [];
+          d.changePics = [];
           if (d.mediafileList) {
             d.mediafileList.forEach(m => {
-              const pic = taskservice.imgUrl + m.extension1 + m.guid + '.jpg'
+              const pic = taskservice.imgUrl + m.extension1 + m.guid + '.jpg';
               if (m.ischanged) {
-                d.changePics.push(pic)
+                d.changePics.push(pic);
               } else {
-                d.proPics.push(pic)
+                d.proPics.push(pic);
               }
-            }); 
+            });
           }
         });
         that.setData({
-          problemList: data
-        })
+          problemList: data,
+        });
       },
       fail(err) {
         that.setData({
-          problemList: []
-        })
+          problemList: [],
+        });
       },
       complete() {
         that.setData({
-          loading: false
-        })
-      }
-    })
+          loading: false,
+        });
+      },
+    });
   },
 
   changeProblem(e) {
     const index = e.currentTarget.dataset.index;
-    const pro = this.data.problemList[index]
+    const pro = this.data.problemList[index];
     wx.navigateTo({
       url: '/pages/mExtra/pSupervisionchangeDetail/pSupervisionchangeDetail',
       events: {
-        uploadOver: (data) => {
+        uploadOver: data => {
           console.log(data);
           setTimeout(() => {
-            this.getProblems()            
+            this.getProblems();
           }, 1000);
-        }
+          this.getOpenerEventChannel().emit('uploadDone')
+        },
       },
-      success: (res) => {
+      success: res => {
         res.eventChannel.emit('acceptDataFromOpenerPage', {
           data: [pro],
-          index: index
-        })
+          index: index,
+        });
       },
-    })
+    });
   },
 
   //鍥剧墖鏀惧ぇ棰勮
   previewImage(e) {
-    const {index, type} = e.currentTarget.dataset;
-    const previewImageUrls = []
-    const pro = this.data.problemList[index[0]]
+    const { index, type } = e.currentTarget.dataset;
+    const previewImageUrls = [];
+    const pro = this.data.problemList[index[0]];
     if (type == 'pro') {
       pro.proPics.forEach(p => {
-        previewImageUrls.push(p)
-      }); 
+        previewImageUrls.push(p);
+      });
     } else {
       pro.changePics.forEach(p => {
-        previewImageUrls.push(p)
+        previewImageUrls.push(p);
       });
     }
     this.setData({
       previewImageUrls,
       previewCurrent: index[1],
       showPreview: true,
-      title: pro.problemname
+      title: pro.problemname,
     });
   },
-})
\ No newline at end of file
+});
diff --git a/pages/mExtra/time.wxs b/pages/mExtra/time.wxs
new file mode 100644
index 0000000..25da003
--- /dev/null
+++ b/pages/mExtra/time.wxs
@@ -0,0 +1,18 @@
+function dateList(time) {
+  var date = time.split(' ')[0];
+  return date.split('-');
+}
+function formatYM(time) {
+  var d = dateList(time);
+  return d[0] + '骞�' + d[1] + '鏈�';
+}
+
+function formatYMD(time) {
+  var d = dateList(time);
+  return d[0] + '骞�' + d[1] + '鏈�' + d[2] + '鏃�';
+}
+
+module.exports = {
+  formatYM: formatYM,
+  formatYMD: formatYMD,
+};
diff --git a/pages/mLedger/components/ledger-tab/index.js b/pages/mLedger/components/ledger-tab/index.js
new file mode 100644
index 0000000..d644ad3
--- /dev/null
+++ b/pages/mLedger/components/ledger-tab/index.js
@@ -0,0 +1,24 @@
+// pages/mLedger/components/ledger-tab/index.js
+Component({
+
+  /**
+   * 缁勪欢鐨勫睘鎬у垪琛�
+   */
+  properties: {
+
+  },
+
+  /**
+   * 缁勪欢鐨勫垵濮嬫暟鎹�
+   */
+  data: {
+
+  },
+
+  /**
+   * 缁勪欢鐨勬柟娉曞垪琛�
+   */
+  methods: {
+
+  }
+})
\ No newline at end of file
diff --git a/pages/mLedger/components/ledger-tab/index.json b/pages/mLedger/components/ledger-tab/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/pages/mLedger/components/ledger-tab/index.json
@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mLedger/components/ledger-tab/index.wxml b/pages/mLedger/components/ledger-tab/index.wxml
new file mode 100644
index 0000000..f634b2c
--- /dev/null
+++ b/pages/mLedger/components/ledger-tab/index.wxml
@@ -0,0 +1,2 @@
+<!--pages/mLedger/components/ledger-tab/index.wxml-->
+<text>pages/mLedger/components/ledger-tab/index.wxml</text>
\ No newline at end of file
diff --git a/pages/mLedger/components/ledger-tab/index.wxss b/pages/mLedger/components/ledger-tab/index.wxss
new file mode 100644
index 0000000..c10172a
--- /dev/null
+++ b/pages/mLedger/components/ledger-tab/index.wxss
@@ -0,0 +1 @@
+/* pages/mLedger/components/ledger-tab/index.wxss */
\ No newline at end of file
diff --git a/pages/mLedger/home/index.js b/pages/mLedger/home/index.js
new file mode 100644
index 0000000..858779d
--- /dev/null
+++ b/pages/mLedger/home/index.js
@@ -0,0 +1,107 @@
+import {
+  parseLedgerStat,
+  parseSelfPatrol,
+  refreshLedgerStatus,
+} from '../../../model/ledger';
+import { useTab } from './tab.js';
+import { useSummary } from './summary.js';
+import { useToolbar } from './toolbar.js';
+import { useList } from './list.js';
+const ledgerservice = require('../../../service/ledgerservice');
+const moment = require('../../../utils/moment.min');
+const app = getApp();
+
+const userId = '4qBbkYqaOnfg7eXO';
+const sceneType = '9';
+
+Page({
+  //姣忔湀鍙拌处鎻愪氦鏈熼檺鏃�
+  DEADLINEDAY: 10,
+  behaviors: [useTab, useSummary, useToolbar, useList],
+  data: {
+    tabList: [],
+    pageList: [],
+    thisMonthInfo: {},
+    lastMonthInfo: {},
+  },
+  onLoad(options) {
+    let now = moment();
+    let limitTime = moment().date(this.DEADLINEDAY);
+    //濡傛灉鏄柊娉ㄥ唽鐢ㄦ埛涓嶅埌涓�涓湀锛屽垯涓嶆彁閱掓湰鏈堟儏鍐碉紝鐩存帴鎻愰啋涓嬩釜鏈堢殑鎯呭喌
+    if (app.globalData.newUser) {
+      limitTime.add(1, 'M');
+    }
+    let deadline = limitTime.format(`MM-${this.DEADLINEDAY}`);
+    let leftday = limitTime.diff(now, 'days');
+    let thisMonth = now.format('YYYY-MM');
+    let lastMonth = now.add(-1, 'M').format('YYYY-MM');
+    this.setData({
+      deadline,
+      leftday,
+      thisMonth,
+      lastMonth,
+    });
+
+    now = moment();
+    //鏈湀
+    this.getLedgerType(now.format('YYYY-MM-DD'), r => {
+      this.setData({
+        tabList: r.types,
+        pageList: r.items,
+        thisMonthInfo: r.monthInfo,
+      });
+      this.handleSort();
+    });
+    //涓婃湀
+    this.getLedgerType(now.add(-1, 'M').format('YYYY-MM-DD'), r => {
+      this.setData({
+        lastMonthInfo: r.monthInfo,
+      });
+    });
+  },
+  getLedgerType(time, success, lastMonth) {
+    ledgerservice.getLedgerSummary(
+      app.globalData.accessToken.userId,
+      app.globalData.userInfo.extension2,
+      // userId, sceneType,
+      time,
+      {
+        success: res => {
+          success(parseLedgerStat(res, lastMonth));
+        },
+      },
+    );
+  },
+  gotoLedgerDetail(e) {
+    var indexGroup = e.currentTarget.dataset.index;
+    // var indexGroup = [parseInt(i[0]), parseInt(i[1])];
+    var ledger = this.data.pageList[indexGroup[0]][indexGroup[1]];
+
+    var that = this;
+    wx.navigateTo({
+      url: '/pages/mLedger/ledgerupload/ledgerupload',
+      events: {
+        uploadOver: function (data) {
+          let i = data.indexGroup;
+          let { pageList, tabList } = that.data;
+          tabList[i[0]].tag--;
+          pageList[i[0]][i[1]].upLoad = true;
+          pageList[i[0]][i[1]].tag = '/res/icons/round_check_fill.png';
+          pageList[i[0]][i[1]].opacity = 0.7;
+          that.setData({
+            pageList,
+            tabList,
+          });
+        },
+      },
+      success: res => {
+        // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+        res.eventChannel.emit('acceptDataFromOpenerPage', {
+          ledger: ledger,
+          indexGroup: indexGroup,
+          type: 0,
+        });
+      },
+    });
+  },
+});
diff --git a/pages/mLedger/home/index.json b/pages/mLedger/home/index.json
new file mode 100644
index 0000000..544eb27
--- /dev/null
+++ b/pages/mLedger/home/index.json
@@ -0,0 +1,9 @@
+{
+  "navigationBarTitleText": "鍙拌处绠$悊",
+  "navigationBarBackgroundColor": "#57E4CB",
+  "navigationBarTextStyle": "white",
+  "backgroundTextStyle": "light",
+  "usingComponents": {
+    "mp-icon": "/component/icon/icon"
+  }
+}
\ No newline at end of file
diff --git a/pages/mLedger/home/index.wxml b/pages/mLedger/home/index.wxml
new file mode 100644
index 0000000..ca8a78d
--- /dev/null
+++ b/pages/mLedger/home/index.wxml
@@ -0,0 +1,12 @@
+<view class="page">
+  <view class="banner-bg"></view>
+  <view class="page__hd">
+    <include src="./summary.wxml" />
+  </view>
+  <view class="page__bd">
+    <include src="./toolbar.wxml" />
+    <include src="./tab.wxml" />
+    <include src="./list.wxml" />
+  </view>
+  <view class="page__ft"></view>
+</view>
diff --git a/pages/mLedger/home/index.wxss b/pages/mLedger/home/index.wxss
new file mode 100644
index 0000000..9eec398
--- /dev/null
+++ b/pages/mLedger/home/index.wxss
@@ -0,0 +1,15 @@
+@import './summary.wxss';
+@import './tab.wxss';
+@import './toolbar.wxss';
+@import './list.wxss';
+
+.banner-bg {
+  position: fixed;
+  width: 100%;
+  height: 50%;
+  background: linear-gradient(to bottom, #57E4CB, #83b6ae);
+}
+
+.hidden {
+  display: none;
+}
\ No newline at end of file
diff --git a/pages/mLedger/home/list.js b/pages/mLedger/home/list.js
new file mode 100644
index 0000000..0cdc0b0
--- /dev/null
+++ b/pages/mLedger/home/list.js
@@ -0,0 +1,9 @@
+/**
+ * 鍙拌处鍒楄〃鏍峰紡鐣岄潰
+ */
+export const useList = Behavior({
+  data: {
+  },
+  methods: {
+  },
+});
diff --git a/pages/mLedger/home/list.wxml b/pages/mLedger/home/list.wxml
new file mode 100644
index 0000000..4ff81b4
--- /dev/null
+++ b/pages/mLedger/home/list.wxml
@@ -0,0 +1,60 @@
+<view class="{{displayMode == 1 ? '':'hidden'}} list-wrap">
+  <view style="height: 1px;"></view>
+  <block wx:for="{{tabList}}" wx:key="index">
+    <t-divider align="left">
+      <view slot="content" style="display: flex; align-items: center;">
+        <t-icon name="numbers-{{index + 1}}" size="16" />
+        {{item.name}}
+      </view>
+    </t-divider>
+    <view>
+      <!-- <view class="list-sub-title">{{item.name}} </view> -->
+      <!-- <view
+      wx:for="{{pageList[index]}}"
+      wx:for-item="item2"
+      wx:for-index="index2"
+      wx:key="index2"
+      style="opacity: {{item2.opacity}};"
+      class="list-item"
+    >
+      <t-icon name="{{item2.iconUrl}}" size="100rpx" />
+      <t-tag
+        wx:if="{{item2.needUpdate}}"
+        shape="square"
+        size="small"
+        theme="danger"
+        >蹇呭~</t-tag
+      >
+      <t-tag wx:else shape="square" size="small" theme="success">閫夊~</t-tag>
+      <view>{{item2.ledgerName}}</view>
+    </view> -->
+      <t-grid column="{{3}}" theme="card" gutter="{{40}}">
+        <t-grid-item
+          wx:for="{{pageList[index]}}"
+          wx:for-item="item2"
+          wx:for-index="index2"
+          wx:key="index2"
+          style="opacity: {{item2.opacity}};"
+          badge-props="{{ item2.badge }}"
+          image="slot"
+          data-index="{{[index, index2]}}"
+          bindtap="gotoLedgerDetail"
+          t-class-content="grid-content-list"
+        >
+          <view slot="image">
+            <t-image
+              src="{{item2.iconUrl}}"
+              mode="aspectFill"
+              width="48"
+              height="48"
+            />
+            <view wx:if="{{item2.upLoad}}" class="top-left">
+              <t-icon name="check-circle-filled" size="24" color="green" />
+            </view>
+          </view>
+          <view slot="text"> {{item2.ledgerName}} </view>
+        </t-grid-item>
+      </t-grid>
+    </view>
+  </block>
+</view>
diff --git a/pages/mLedger/home/list.wxss b/pages/mLedger/home/list.wxss
new file mode 100644
index 0000000..2eee3ef
--- /dev/null
+++ b/pages/mLedger/home/list.wxss
@@ -0,0 +1,22 @@
+.list-wrap {
+  background-color: white;
+  margin-top: 0 !important;
+}
+
+.list-sub-title {
+  font-size: 32rpx;
+  font-weight: 600;
+  /* background-color: whitesmoke; */
+  padding-left: 16px;
+  /* text-align: center; */
+}
+
+.list-item {
+  display: flex;
+  font-size: 28rpx;
+}
+
+.grid-content-list {
+  /* background-color: aliceblue; */
+  font-size: 24rpx;
+}
\ No newline at end of file
diff --git a/pages/mLedger/home/summary.js b/pages/mLedger/home/summary.js
new file mode 100644
index 0000000..a123e51
--- /dev/null
+++ b/pages/mLedger/home/summary.js
@@ -0,0 +1,27 @@
+/**
+ * 鍙拌处姹囨��
+ */
+export const useSummary = Behavior({
+  data: {
+    //褰撳墠鏄剧ず鏈堜唤
+    showThisMonth: true,
+  },
+  methods: {
+    changeMonth() {
+      let showThisMonth = !this.data.showThisMonth;
+      this.setData({ showThisMonth });
+    },
+    gotoHistory() {
+      let tabList = this.data.tabList;
+      wx.navigateTo({
+        url: '/pages/mLedger/ledgerhistory/ledgerhistory',
+        success: res => {
+          // 閫氳繃 eventChannel 鍚戣鎵撳紑椤甸潰浼犻�佹暟鎹�
+          res.eventChannel.emit('acceptDataFromOpenerPage', {
+            tabList: tabList,
+          });
+        },
+      });
+    },
+  },
+});
diff --git a/pages/mLedger/home/summary.wxml b/pages/mLedger/home/summary.wxml
new file mode 100644
index 0000000..c8eadea
--- /dev/null
+++ b/pages/mLedger/home/summary.wxml
@@ -0,0 +1,91 @@
+<view class="head_right">
+  <span bindtap="changeMonth">
+    <text class="head_tag"
+      >{{showThisMonth ? thisMonth + '鏈湀' : lastMonth + '涓婃湀'}}姹囨��</text
+    >
+    <mp-icon
+      style="margin-left: 4px"
+      icon="transfer2"
+      color="white"
+      size="{{20}}"
+    ></mp-icon>
+  </span>
+  <text class="head_btn" bindtap="gotoHistory">鍘嗗彶璁板綍 ></text>
+</view>
+<view class="card">
+  <block wx:if="{{showThisMonth}}">
+    <view class="head_row">
+      <view class="head_row_item">
+        <view class="head_tag">瀹屾垚搴�</view>
+        <view class="head_1 head_1_big"
+          >{{thisMonthInfo.percent}}<text class="head_row_item_tag"
+            >%</text
+          ></view
+        >
+      </view>
+      <view class="head_row_item">
+        <view class="head_tag">蹇呭~椤�</view>
+        <view class="head_1"
+          >{{thisMonthInfo.finishedMust}}<text class="head_row_item_tag"
+            >/{{thisMonthInfo.totalMust}}</text
+          ></view
+        >
+      </view>
+      <view class="head_row_item">
+        <view class="head_tag">閫夊~椤�</view>
+        <view class="head_1"
+          >{{thisMonthInfo.finishedSelect}}<text class="head_row_item_tag"
+            >/{{thisMonthInfo.totalSelect}}</text
+          ></view
+        >
+      </view>
+    </view>
+    <view class="head_row">
+      <view class="head_tag">鏈湡鍙拌处鎻愪氦鏃ワ細{{deadline}}</view>
+      <block wx:if="{{thisMonthInfo.percent < 1}}">
+        <view wx:if="{{leftday > 0}}" class="head_tag"
+          >鍓╀綑<text>{{leftday}}</text>澶�</view
+        >
+        <view wx:else class="head_tag"
+          >閫炬湡 <text>{{thisMonthInfo.overtime}}</text>澶�</view
+        >
+      </block>
+    </view>
+    <view class="head_tag">{{thisMonthInfo.suggestion}}</view>
+  </block>
+  <block wx:else>
+    <view class="head_row">
+      <view class="head_row_item">
+        <view class="head_tag">瀹屾垚搴�</view>
+        <view class="head_1"
+          >{{lastMonthInfo.percent}}<text class="head_row_item_tag"
+            >%</text
+          ></view
+        >
+      </view>
+      <view class="head_row_item">
+        <view class="head_tag">蹇呭~椤�</view>
+        <view class="head_1"
+          >{{lastMonthInfo.finishedMust}}<text class="head_row_item_tag"
+            >/{{lastMonthInfo.totalMust}}</text
+          ></view
+        >
+      </view>
+      <view class="head_row_item">
+        <view class="head_tag">閫夊~椤�</view>
+        <view class="head_1"
+          >{{lastMonthInfo.finishedSelect}}<text class="head_row_item_tag"
+            >/{{lastMonthInfo.totalSelect}}</text
+          ></view
+        >
+      </view>
+    </view>
+    <view class="head_row">
+      <view class="head_tag">鎻愪氦鎯呭喌锛歿{lastMonthInfo.status}}</view>
+    </view>
+    <view class="head_tag">寤鸿锛歿{lastMonthInfo.suggestion}}</view>
+  </block>
+</view>
+<!-- <view class="head_right">
+  <text class="head_btn" bindtap="gotoHistory">鍘嗗彶璁板綍 ></text>
+</view> -->
diff --git a/pages/mLedger/home/summary.wxss b/pages/mLedger/home/summary.wxss
new file mode 100644
index 0000000..80b6162
--- /dev/null
+++ b/pages/mLedger/home/summary.wxss
@@ -0,0 +1,13 @@
+@import '../ledgerhome/ledgerhome.wxss';
+
+.head_right {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.head_btn{
+  background-color: initial;
+  padding: 4px 0px;
+  border-radius: 4px;
+}
\ No newline at end of file
diff --git a/pages/mLedger/home/tab.js b/pages/mLedger/home/tab.js
new file mode 100644
index 0000000..08b03a2
--- /dev/null
+++ b/pages/mLedger/home/tab.js
@@ -0,0 +1,16 @@
+/**
+ * 鍙拌处閫夐」鍗℃牱寮忕晫闈�
+ */
+export const useTab = Behavior({
+  data: {
+    tabIndex: 0,
+  },
+  methods: {
+    onTabsChange(e) {
+      this.setData({ tabIndex: e.detail.value });
+    },
+    onTabsClick(e){
+      
+    }
+  },
+});
diff --git a/pages/mLedger/home/tab.wxml b/pages/mLedger/home/tab.wxml
new file mode 100644
index 0000000..a964826
--- /dev/null
+++ b/pages/mLedger/home/tab.wxml
@@ -0,0 +1,50 @@
+<t-tabs
+  class="{{displayMode == 0 ? '' : 'hidden'}}"
+  defaultValue="{{0}}"
+  value="{{tabIndex}}"
+  bind:change="onTabsChange"
+  bind:click="onTabsClick"
+  space-evenly="{{false}}"
+  t-class="custom-tabs"
+  t-class-item="custom-item"
+  t-class-track="custom-track"
+  t-class-content="custom-panel"
+>
+  <t-tab-panel
+    wx:for="{{tabList}}"
+    wx:key="index"
+    label="{{item.name}}"
+    value="{{index}}"
+    badge-props="{{ {count:item.tag} }}"
+    class="custom-tab-panel"
+  >
+    <t-grid column="{{3}}" theme="card" gutter="{{40}}">
+      <t-grid-item
+        wx:for="{{pageList[index]}}"
+        wx:for-item="item2"
+        wx:for-index="index2"
+        wx:key="index2"
+        style="opacity: {{item2.opacity}};"
+        badge-props="{{ item2.badge }}"
+        image="slot"
+        data-index="{{[index, index2]}}"
+        bindtap="gotoLedgerDetail"
+        t-class-text="grid-item"
+        t-class-content="grid-content"
+      >
+        <view slot="image">
+          <t-image
+            src="{{item2.iconUrl}}"
+            mode="aspectFill"
+            width="48"
+            height="48"
+          />
+          <view wx:if="{{item2.upLoad}}" class="top-left">
+            <t-icon name="check-circle-filled" size="24" color="green" />
+          </view>
+        </view>
+        <view slot="text"> {{item2.ledgerName}} </view>
+      </t-grid-item>
+    </t-grid>
+  </t-tab-panel>
+</t-tabs>
diff --git a/pages/mLedger/home/tab.wxss b/pages/mLedger/home/tab.wxss
new file mode 100644
index 0000000..f7ea6ef
--- /dev/null
+++ b/pages/mLedger/home/tab.wxss
@@ -0,0 +1,44 @@
+
+.card {
+  height: initial;
+}
+
+.custom-tabs {
+  /* --td-tab-item-tag-bg: white !important; */
+  /* --td-tab-nav-bg-color: transparent; */
+  /* background-color: transparent !important; */
+  /* padding: var(--td-spacer) var(--td-spacer) 0 var(--td-spacer); */
+  min-height: 60vh;
+  background-color: white;
+}
+
+.custom-track {
+  /* background-color: aqua; */
+}
+
+.custom-item {
+  /* background-color: transparent; */
+}
+
+.custom-panel {
+  /* height: 120px; */
+}
+
+.custom-tab-panel {}
+
+.grid-content {
+  /* background-color: aliceblue; */
+  font-size: 24rpx;
+}
+
+.grid-item {
+  /* font-size: 24rpx; */
+}
+
+.top-left {
+  position: absolute;
+  top: 25rpx;
+  /* bottom: 0rpx; */
+  left: 0rpx;
+  right: 0;
+}
\ No newline at end of file
diff --git a/pages/mLedger/home/toolbar.js b/pages/mLedger/home/toolbar.js
new file mode 100644
index 0000000..9571d83
--- /dev/null
+++ b/pages/mLedger/home/toolbar.js
@@ -0,0 +1,55 @@
+/**
+ * 宸ュ叿鏍忥紝鎺掑簭銆佸垏鎹㈡樉绀烘ā寮�
+ */
+export const useToolbar = Behavior({
+  data: {
+    color: '#FA550F',
+    sort: '',
+    sortText: '榛樿鎺掑簭',
+    displayMode: 0,
+  },
+  methods: {
+    handleSort() {
+      let { sort, sortText } = this.data;
+      if (sort === '') {
+        sort = 'asc';
+        sortText = '蹇呭~浼樺厛';
+      } else if (sort === 'asc') {
+        sort = 'desc';
+        sortText = '閫夊~浼樺厛';
+      } else {
+        sort = '';
+        sortText = '榛樿鎺掑簭';
+      }
+      this.setData({ sort, sortText });
+      this.changeSort(sort);
+    },
+
+    changeStyle() {
+      let { displayMode } = this.data;
+      displayMode = !displayMode;
+      this.setData({ displayMode });
+    },
+
+    changeSort(sort) {
+      const { pageList } = this.data;
+      pageList.forEach(page => {
+        page.sort((a, b) => {
+          // 榛樿鎺掑簭
+          if (sort === '') {
+            return a.ledgerSubTypeId - b.ledgerSubTypeId;
+          }
+          // 閫夊~浼樺厛
+          else if (sort === 'asc') {
+            return b.needUpdate - a.needUpdate;
+          }
+          // 閫夊~浼樺厛
+          else {
+            return a.needUpdate - b.needUpdate;
+          }
+        });
+      });
+      this.setData({ pageList });
+    },
+  },
+});
diff --git a/pages/mLedger/home/toolbar.wxml b/pages/mLedger/home/toolbar.wxml
new file mode 100644
index 0000000..7659277
--- /dev/null
+++ b/pages/mLedger/home/toolbar.wxml
@@ -0,0 +1,36 @@
+<t-sticky z-index="{{1000}}">
+  <view class="filter-wrap">
+    <view class="filter-item" bind:tap="handleSort">
+      <text style="color: {{sort !== '' ? color : '' }}">{{ sortText }}</text>
+      <view class="filter-sort">
+        <t-icon
+          prefix="wr"
+          name="arrow_drop_up"
+          size="18rpx"
+          style="color:{{sort === 'asc' ? color : '#bbb'}}"
+        />
+        <t-icon
+          prefix="wr"
+          name="arrow_drop_down"
+          size="18rpx"
+          style="color:{{sort === 'desc' ? color : '#bbb'}}"
+        />
+      </view>
+    </view>
+    <view class="filter-item" bindtap="changeStyle">
+      {{displayMode == 0 ? '缃戞牸鎺掑垪' :'鍒楄〃鎺掑垪'}}
+      <view class="switch-btn">
+        <view
+          class="{{displayMode == 0 ? 'switch-selected' : 'switch-unselected'}} switch-btn-left"
+        >
+          <t-icon name="component-grid" color="#333" size="32rpx" />
+        </view>
+        <view
+          class="{{displayMode == 1 ? 'switch-selected' :'switch-unselected'}} switch-btn-right"
+        >
+          <t-icon name="list" color="#333" size="32rpx" />
+        </view>
+      </view>
+    </view>
+  </view>
+</t-sticky>
diff --git a/pages/mLedger/home/toolbar.wxss b/pages/mLedger/home/toolbar.wxss
new file mode 100644
index 0000000..b63b76b
--- /dev/null
+++ b/pages/mLedger/home/toolbar.wxss
@@ -0,0 +1,59 @@
+.filter-wrap {
+  /* width: 100%; */
+  height: 88rpx;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  position: relative;
+  background: #fff;
+  z-index: 1000;
+  border-bottom: 1px solid rgba(128, 128, 128, 0.11);
+  padding: 0 8px;
+}
+
+.filter-item {
+  /* width: 33.33vw; */
+  height: 100%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-size: 28rpx;
+  line-height: 36rpx;
+  font-weight: 400;
+  color: rgba(51, 51, 51, 1);
+  gap: 2px;
+}
+
+.filter-sort {
+  display: flex;
+  flex-direction: column;
+  margin-left: 6rpx;
+  justify-content: space-between;
+}
+
+.switch-btn {
+  border: 1px solid rgba(128, 128, 128, 0.171);
+  background: rgba(128, 128, 128, 0.171);
+  border-radius: 4px;
+  display: flex;
+  justify-content: space-between;
+}
+
+.switch-btn-left {
+  border-top-left-radius: 4px;
+  border-bottom-left-radius: 4px;
+  padding: 2px 4px;
+
+}
+
+.switch-btn-right {
+  border-top-right-radius: 4px;
+  border-bottom-right-radius: 4px;
+  padding: 2px 4px;
+}
+
+.switch-selected {
+  background-color: rgb(255, 255, 255);
+}
+
+.switch-unselected {}
\ No newline at end of file
diff --git a/pages/mLedger/ledgerhistory/ledgerhistory.wxml b/pages/mLedger/ledgerhistory/ledgerhistory.wxml
index e888d78..d1bad71 100644
--- a/pages/mLedger/ledgerhistory/ledgerhistory.wxml
+++ b/pages/mLedger/ledgerhistory/ledgerhistory.wxml
@@ -58,7 +58,7 @@
             bindtap="previewImage"
             data-index="{{i1}},{{i2}}"
           >
-            <image class="" src="{{ledger.path1[0]}}" mode="aspectFill"></image>
+            <image class="" src="{{ledger.path1[0]}}" mode="aspectFill" show-menu-by-longpress="{{true}}"></image>
             <view>{{ledger.ledgerName}}</view>
           </view>
         </view>
diff --git a/pages/mLedger/ledgerhome/ledgerhome.js b/pages/mLedger/ledgerhome/ledgerhome.js
index a377ebb..d4156e9 100644
--- a/pages/mLedger/ledgerhome/ledgerhome.js
+++ b/pages/mLedger/ledgerhome/ledgerhome.js
@@ -1,4 +1,3 @@
-// pages/mLedger/ledgerhome/ledgerhome.js
 const ledgerservice = require('../../../service/ledgerservice');
 const moment = require('../../../utils/moment.min');
 const app = getApp();
diff --git a/pages/mLedger/ledgerhome/ledgerhome.wxml b/pages/mLedger/ledgerhome/ledgerhome.wxml
index 3916f91..6aadc75 100644
--- a/pages/mLedger/ledgerhome/ledgerhome.wxml
+++ b/pages/mLedger/ledgerhome/ledgerhome.wxml
@@ -1,18 +1,19 @@
-<!--pages/mLedger/ledgerhome/ledgerhome.wxml-->
 <view class="page">
   <view class="banner-bg"></view>
   <view class="page__hd">
     <!-- <view class="fyui-panel"> -->
-    <view class="head_right" bindtap="changeMonth">
-      <text class="head_tag"
-        >{{showThisMonth ? thisMonth + '鏈湀' : lastMonth + '涓婃湀'}}姹囨��</text
-      >
-      <mp-icon
-        style="margin-left: 4px"
-        icon="transfer2"
-        color="white"
-        size="{{20}}"
-      ></mp-icon>
+    <view class="">
+      <view bindtap="changeMonth">
+        <text class="head_tag"
+          >{{showThisMonth ? thisMonth + '鏈湀' : lastMonth + '涓婃湀'}}姹囨��</text
+        >
+        <mp-icon
+          style="margin-left: 4px"
+          icon="transfer2"
+          color="white"
+          size="{{20}}"
+        ></mp-icon>
+      </view>
     </view>
     <view class="card">
       <block wx:if="{{showThisMonth}}">
@@ -148,7 +149,7 @@
                 mode="aspectFit"
               ></image>
               <image class="ledger-icon" src="{{ledger.iconUrl}}"></image>
-              <view style="padding: 0 10px;">{{ledger.ledgerName}}</view>
+              <view style="padding: 0 10px">{{ledger.ledgerName}}</view>
             </view>
           </view>
         </swiper-item>
diff --git a/pages/mLedger/ledgerhome/ledgerhome.wxss b/pages/mLedger/ledgerhome/ledgerhome.wxss
index ce94f84..dfdf761 100644
--- a/pages/mLedger/ledgerhome/ledgerhome.wxss
+++ b/pages/mLedger/ledgerhome/ledgerhome.wxss
@@ -1,4 +1,3 @@
-/* pages/mLedger/ledgerhome/ledgerhome.wxss */
 .banner-bg {
   position: fixed;
   width: 100%;
diff --git a/pages/mLedger/ledgerupload/ledgerupload.json b/pages/mLedger/ledgerupload/ledgerupload.json
index 761e0e2..a928de6 100644
--- a/pages/mLedger/ledgerupload/ledgerupload.json
+++ b/pages/mLedger/ledgerupload/ledgerupload.json
@@ -5,6 +5,7 @@
   "usingComponents": {
     "mp-upload":"/component/uploader/uploader",
     "c-dialog": "/component/commondialog/commondialog",
+    "my-gallery": "/component/mygallery/mygallery",
     "mp-gallery": "/component/gallery/gallery",
     "mp-icon": "/component/icon/icon"
   }
diff --git a/pages/mLedger/ledgerupload/ledgerupload.wxml b/pages/mLedger/ledgerupload/ledgerupload.wxml
index 4806945..7b43e76 100644
--- a/pages/mLedger/ledgerupload/ledgerupload.wxml
+++ b/pages/mLedger/ledgerupload/ledgerupload.wxml
@@ -5,7 +5,7 @@
   </view>
   <view class="page__bd">
     <view wx:if="{{ledger.description}}" class="ledger-des">
-      <view style="display: flex; align-items: center; height: 20px;margin-bottom: 10px;">
+      <view style="display: flex;align-items: center;height: 20px;margin-bottom: 10px;">
         <mp-icon icon="info" color="" size="{{16}}"></mp-icon>
         <text>{{ledger.ledgerTypeId == -1 ? '鎿嶄綔鎻愮ず' : '鍙拌处鎻愮ず'}}</text>
       </view>
@@ -45,6 +45,7 @@
           mode="aspectFill"
           bindtap="previewImage"
           data-index="{{index}}"
+          show-menu-by-longpress="{{true}}"
         ></image>
       </view>
       <view style="font-size: 14px; margin-top: 16px">澶囨敞</view>
@@ -55,37 +56,37 @@
       ></textarea>
     </block>
   </view>
-  <view wx:if="{{!ledger.upLoad || reUpload}}" class="page__ft">
-    <view
-      wx:if="{{ledger.notRelated}}"
-      class="submit submit-2 left"
-      bindtap="onSubmitNoLedger"
-      >涓嶆秹鍙�</view
-    >
-    <view class="submit right" bindtap="onSubmit">鎻愪氦</view>
-  </view>
-  <view wx:else class="page__ft">
-    <!-- <view
-      wx:if="{{ledger.notRelated}}"
-      class="submit submit-2 left"
-      bindtap=""
-      >淇敼</view
-    > -->
-    <view class="submit right" bindtap="reUpload">閲嶆柊涓婁紶</view>
+  <view class="page__ft">
+    <view wx:if="{{!ledger.upLoad || reUpload}}" class="fix-bottom">
+      <view
+        wx:if="{{ledger.notRelated}}"
+        class="submit submit-2 left"
+        bindtap="onSubmitNoLedger"
+        >涓嶆秹鍙�</view
+      >
+      <view class="submit right" bindtap="onSubmit">鎻愪氦</view>
+    </view>
+    <view wx:else class="fix-bottom">
+      <view class="submit right" bindtap="reUpload">閲嶆柊涓婁紶</view>
+    </view>
   </view>
 
   <c-dialog show="{{showDialog}}" yes="纭" bindconfirm="submitLedger">
-    <view
-      >{{uploadMode == 0 ? '纭鏄惁鎻愪氦锛�' :
-      '纭涓嶆秹鍙婏紵'}}</view
-    >
+    <view>{{uploadMode == 0 ? '纭鏄惁鎻愪氦锛�' : '纭涓嶆秹鍙婏紵'}}</view>
   </c-dialog>
-  <mp-gallery
+  <!-- <mp-gallery
     class="gallery"
     hide-on-click="{{true}}"
     show-delete="{{false}}"
     show="{{showPreview}}"
     img-urls="{{previewImageUrls}}"
     current="{{previewCurrent}}"
-  ></mp-gallery>
+  ></mp-gallery> -->
+  <my-gallery
+  hide-on-click="{{true}}"
+  show-delete="{{false}}"
+  show="{{showPreview}}"
+  img-urls="{{previewImageUrls}}"
+  current="{{previewCurrent}}"
+></my-gallery>
 </view>
diff --git a/pages/mLedger/ledgerupload/ledgerupload.wxss b/pages/mLedger/ledgerupload/ledgerupload.wxss
index c1b3c52..0d1e1c9 100644
--- a/pages/mLedger/ledgerupload/ledgerupload.wxss
+++ b/pages/mLedger/ledgerupload/ledgerupload.wxss
@@ -12,7 +12,12 @@
   padding-bottom: 100px;
 }
 
-.page__ft {
+.fix-bottom {
+  padding-top: 10px;
+  padding-bottom: 10px;
+  padding-bottom: calc(10px + constant(safe-area-inset-bottom));
+  padding-bottom: calc(10px + env(safe-area-inset-bottom));
+  text-align: center;
   box-shadow: 0px 0px 16px 2px rgba(0, 0, 0, 0.06);
   position: fixed;
   bottom: 0;
@@ -21,13 +26,14 @@
   display: flex;
   align-items: flex-end;
   z-index: 1;
+  background-color: white;
 }
 
-.page__ft .left {
+.fix-bottom .left {
   flex: 1;
 }
 
-.page__ft .right {
+.fix-bottom .right {
   flex: 2; 
 }
 
diff --git a/pages/mSelfPatrol/components/emergency-self-patrol/index.js b/pages/mSelfPatrol/components/emergency-self-patrol/index.js
index 49b5268..50c57c2 100644
--- a/pages/mSelfPatrol/components/emergency-self-patrol/index.js
+++ b/pages/mSelfPatrol/components/emergency-self-patrol/index.js
@@ -1,4 +1,4 @@
-import { parseLedgerStat, refreshLedgerStatus } from '../../../../model/ledger';
+import { parseLedgerStat,parseSelfPatrol, refreshLedgerStatus } from '../../../../model/ledger';
 const selfpatrolservice = require('../../../../service/selfpatrolservice');
 const moment = require('../../../../utils/moment.min');
 const app = getApp();
@@ -66,9 +66,9 @@
     fetchTaskRecord(taskId, index) {
       selfpatrolservice.getTaskRecord(taskId, {
         success: res => {
-          let r = parseLedgerStat(res.data);
+          let r = parseSelfPatrol(res.data);
           this.setData({
-            [`categories[${index}].items`]: r[1][0],
+            [`categories[${index}].items`]: r.items[0],
           });
         },
       });
diff --git a/pages/mSelfPatrol/components/self-patrol/index.js b/pages/mSelfPatrol/components/self-patrol/index.js
index 21d8d56..0ed29c7 100644
--- a/pages/mSelfPatrol/components/self-patrol/index.js
+++ b/pages/mSelfPatrol/components/self-patrol/index.js
@@ -1,4 +1,4 @@
-import { parseLedgerStat, refreshLedgerStatus } from '../../../../model/ledger';
+import { parseSelfPatrol, refreshLedgerStatus } from '../../../../model/ledger';
 const ledgerservice = require('../../../../service/ledgerservice');
 const moment = require('../../../../utils/moment.min');
 const app = getApp();
@@ -37,12 +37,12 @@
       this.getLedgerType(nowStr, r => {
         this.setData({
           tags1: {
-            count: r[0][0].tag,
+            count: r.types[0].tag,
           },
-          pageList1: r[1][0],
-          progress: r[2].percent2,
-          finished: r[2].finishedSelf,
-          tabList: [r[0][0]],
+          pageList1: r.items[0],
+          progress: r.monthInfo.percent,
+          finished: r.monthInfo.finishedMust,
+          tabList: r.types,
           refresh: false,
         });
       });
@@ -56,7 +56,7 @@
         time,
         {
           success(res) {
-            let r = parseLedgerStat(res, lastMonth);
+            let r = parseSelfPatrol(res);
             success(r);
           },
         },
diff --git a/pages/mSelfPatrol/components/self-patrol/index.wxml b/pages/mSelfPatrol/components/self-patrol/index.wxml
index 9af9f77..3cb2435 100644
--- a/pages/mSelfPatrol/components/self-patrol/index.wxml
+++ b/pages/mSelfPatrol/components/self-patrol/index.wxml
@@ -1,10 +1,10 @@
-<scroll-view
+<!-- <scroll-view
   bindrefresherrefresh="init"
   refresher-enabled
   refresher-triggered="{{refresh}}"
   scroll-y
   style="height: 90vh;"
->
+> -->
   <view class="self-patrol-static">
     <view> {{thisMonth}} </view>
     <view class="head_row">
@@ -26,7 +26,7 @@
     <t-progress percentage="{{progress}}" />
   </view> -->
   </view>
-  <t-grid column="{{3}}" theme="card">
+  <t-grid column="{{3}}" theme="card" gutter="{{40}}">
     <t-grid-item
       style="opacity: {{item.opacity}};"
       badge-props="{{ item.badge }}"
@@ -39,4 +39,4 @@
       t-class-text="grid-item"
     />
   </t-grid>
-</scroll-view>
+<!-- </scroll-view> -->
diff --git a/pages/mSelfPatrol/patrolhome/index.wxml b/pages/mSelfPatrol/patrolhome/index.wxml
index 5f873f4..bbdf757 100644
--- a/pages/mSelfPatrol/patrolhome/index.wxml
+++ b/pages/mSelfPatrol/patrolhome/index.wxml
@@ -1,23 +1,20 @@
 <view class="page">
-  <t-self-patrol wx:if="{{!exist}}" />
-  <t-tabs
-    wx:else
-    sticky
-    stickyProps="{{stickyProps}}"
-    defaultValue="{{0}}"
-  >
-    <t-tab-panel label="鑷贰鏌�" value="0">
-      <t-self-patrol />
-    </t-tab-panel>
-    <t-tab-panel
-      label="搴旀�ヨ嚜宸℃煡"
-      value="1"
-      badge-props="{{ { count: unfinishedNum, offset: ['-16rpx', '8rpx'] } }}"
-    >
-      <t-emergency-self-patrol />
-    </t-tab-panel>
-  </t-tabs>
-  <!-- <t-loading
+  <view class="page__hd"></view>
+  <view class="page__bd">
+    <t-self-patrol wx:if="{{!exist}}" />
+    <t-tabs wx:else sticky stickyProps="{{stickyProps}}" defaultValue="{{0}}">
+      <t-tab-panel label="鑷贰鏌�" value="0">
+        <t-self-patrol />
+      </t-tab-panel>
+      <t-tab-panel
+        label="搴旀�ヨ嚜宸℃煡"
+        value="1"
+        badge-props="{{ { count: unfinishedNum, offset: ['-16rpx', '8rpx'] } }}"
+      >
+        <t-emergency-self-patrol />
+      </t-tab-panel>
+    </t-tabs>
+    <!-- <t-loading
     t-class="t-class-loading"
     t-class-text="t-class-loading-text"
     t-class-indicator="t-class-indicator"
@@ -26,4 +23,6 @@
     theme="circular"
     size="40rpx"
   /> -->
+  </view>
+  <view class="page__ft"></view>
 </view>
diff --git a/pages/mService/cPracticaloperation/index.js b/pages/mService/cPracticaloperation/index.js
new file mode 100644
index 0000000..86fccb2
--- /dev/null
+++ b/pages/mService/cPracticaloperation/index.js
@@ -0,0 +1,103 @@
+// pages/mService/cPracticaloperation/index.js
+import scheduleservice from '../../../service/scheduleservice';
+import $f from '../../../service/baserequest';
+import moment from '../../../utils/moment.min';
+
+Component({
+  properties: {},
+
+  data: {
+    icon_calendar: $f.baseIconUrl + 'res/calendar.jpg',
+    // 瀹炴搷浜嬪姟
+    operations: [],
+    alert: '',
+  },
+
+  lifetimes: {
+    attached: function () {
+      this.getOperations();
+    },
+  },
+
+  methods: {
+    // 鑾峰彇鐢ㄦ埛瀹炴搷浜嬪姟
+    getOperations() {
+      const that = this;
+      scheduleservice.getOperationRecords({
+        success(res) {
+          const operations = res.data;
+          operations.forEach(o => {
+            if (o.record) {
+              o.state = o.record.prStateId;
+              o.record.time = moment(o.record.prTime).format(
+                'YYYY骞碝M鏈圖D鏃� HH:mm:ss',
+              );
+            } else {
+              o.state = o.operation.poStateRangeId.split(';')[0];
+            }
+          });
+          that.setData({ operations });
+          that.refreshAlertTxt();
+        },
+        fail(e) {
+          console.log(e);
+        },
+      });
+    },
+
+    handleSwitchChange(e) {
+      const that = this;
+      const { index } = e.currentTarget.dataset;
+      const s = this.data.operations[index];
+      const newState = this.nextState(s.operation, s.state);
+      scheduleservice.doOperations(
+        { operationId: s.operation.poId, stateId: newState },
+        {
+          success(res) {
+            that.setData({
+              [`operations[${index}].state`]: res.data.prStateId,
+              [`operations[${index}].record.time`]: moment(
+                res.data.prTime,
+              ).format('YYYY骞碝M鏈圖D鏃� HH:mm:ss'),
+            });
+            that.refreshAlertTxt();
+          },
+          fail(e) {},
+        },
+      );
+    },
+
+    // 璁惧杩愯鍒囨崲鑷充笅涓�涓姸鎬�
+    nextState(operation, state) {
+      const stateRange = operation.poStateRangeId.split(';');
+      let index = stateRange.indexOf(state);
+      index++;
+      if (index >= stateRange.length) {
+        index = 0;
+      }
+      return stateRange[index];
+    },
+
+    refreshAlertTxt() {
+      let alertRange;
+      let maxState;
+      this.data.operations.forEach(o => {
+        if (alertRange == undefined) {
+          alertRange = o.operation.poStateRemindRange.split(';');
+        }
+        if (maxState) {
+          if (o.state > maxState) {
+            maxState = o.state;
+          }
+        } else {
+          maxState = o.state;
+        }
+      });
+      if (alertRange && maxState) {
+        this.setData({
+          alert: alertRange[maxState],
+        });
+      }
+    },
+  },
+});
diff --git a/pages/mService/cPracticaloperation/index.json b/pages/mService/cPracticaloperation/index.json
new file mode 100644
index 0000000..e8cfaaf
--- /dev/null
+++ b/pages/mService/cPracticaloperation/index.json
@@ -0,0 +1,4 @@
+{
+  "component": true,
+  "usingComponents": {}
+}
\ No newline at end of file
diff --git a/pages/mService/cPracticaloperation/index.wxml b/pages/mService/cPracticaloperation/index.wxml
new file mode 100644
index 0000000..ab9ceab
--- /dev/null
+++ b/pages/mService/cPracticaloperation/index.wxml
@@ -0,0 +1,32 @@
+<block wx:if="{{operations.length > 0}}">
+  <view class="schedule-top">
+    <view class="schedule-top-main">
+      <t-icon name="{{icon_calendar}}" size="36rpx" />
+      <text>{{operations[0].operation.poModuleName}}</text>
+    </view>
+    <view class="schedule-top-extend" bindtap="onCardClick">
+      <text>{{alert}}</text>
+      <!-- <t-icon name="{{expand ? 'chevron-up' : 'chevron-down'}}" size="36rpx" /> -->
+    </view>
+  </view>
+  <view class="schedule-wrap schedule-card__item-wrap">
+    <block wx:for="{{operations}}" wx:key="index">
+      <view class="schedule-card">
+        <view class="schedule-card__item">
+          <view class="schedule-title"
+            >{{item.operation.poTitle}}锛堣澶噞{item.operation.poDeviceCode}}锛�</view
+          >
+          <t-switch
+            bindchange="handleSwitchChange"
+            data-index="{{index}}"
+            value="{{item.state  == '1'}}"
+            label="{{['寮�', '鍏�']}}"
+          />
+        </view>
+        <view class="schedule-card__item-tag">
+          涓婃鎿嶄綔鏃堕棿锛歿{item.record ? item.record.time : '----'}}
+        </view>
+      </view>
+    </block>
+  </view>
+</block>
diff --git a/pages/mService/cPracticaloperation/index.wxss b/pages/mService/cPracticaloperation/index.wxss
new file mode 100644
index 0000000..065b282
--- /dev/null
+++ b/pages/mService/cPracticaloperation/index.wxss
@@ -0,0 +1,123 @@
+.schedule-top {
+  background: linear-gradient(0deg, #ffffff, #E2EFFF, #c5dfff);
+  /* margin: 0 10px; */
+  padding: 8px;
+  font-size: 30rpx;
+  color: var(--fyui-text-color_1);
+  border-radius: 6px 6px 0 0;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  box-shadow: 0 1px 3px rgba(0, 0, 0, .4);
+}
+
+.schedule-top__finished {
+  /* background: linear-gradient(0deg, #158a0b, #3a9c26, #6ead5b); */
+}
+
+.schedule-top-main {
+  display: flex;
+  align-items: center;
+}
+
+.schedule-top-main>text {
+  margin-left: 8rpx;
+}
+
+.schedule-top-extend {
+  display: flex;
+  font-size: 24rpx;
+  align-items: center;
+  color: var(--fyui-text-color_2);
+}
+
+.schedule-wrap {
+  position: relative;
+  min-height: 100rpx;
+  margin-bottom: 16rpx;
+}
+
+.schedule-card {
+  /* position: absolute; */
+  /* width: max-content; */
+  /* background: linear-gradient(0deg, #ffffff, #E2EFFF, #c5dfff); */
+  background-color: white;
+  /* margin: 0 10px; */
+  /* margin-top: 4px; */
+  padding: 8px;
+  color: var(--fyui-text-color_1);
+  border-radius: 6px;
+  left: 0;
+  right: 0;
+  box-shadow: 1px 1px 3px rgba(0, 0, 0, .4);
+}
+
+.schedule-card__expand {
+  z-index: 0 !important;
+}
+
+.schedule-card__finished {
+  /* background: linear-gradient(0deg, #6ead5b, #3a9c26, #158a0b); */
+}
+
+.schedule-card__item {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+}
+
+.schedule-card__item-tag{
+  font-size: 12px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  flex: 1;
+  padding: 0 4px;
+  color: var(--fyui-text-color_3);
+}
+
+.schedule-card__item-0 {
+  border-radius: 0 0 6px 6px !important;
+}
+
+.schedule-category {
+  display: block;
+  font-size: 16px;
+  font-weight: 600;
+  color: rgb(255, 255, 255);
+}
+
+.schedule-category>view>text {
+  margin-right: 4px;
+}
+
+.schedule-title {
+  font-size: 14px;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  flex: 1;
+  padding: 0 4px;
+}
+
+.t-class-button {
+  --td-button-small-font-size: 36rpx;
+  /* --td-button-small-height: 50px; */
+}
+
+.schedule-btn {
+  background-color: white;
+  text-align: center;
+  color: #e08402;
+  font-size: 14px;
+  padding: 4px 8px;
+  border-radius: 8px;
+}
+
+.schedule-btn__finished {
+  color: #158a0b;
+}
+
+.schedule-btn:active {
+  background: rgb(224, 224, 224);
+}
\ No newline at end of file
diff --git a/pages/mService/cScheduletoday/index.js b/pages/mService/cScheduletoday/index.js
index f15118f..2ef55b6 100644
--- a/pages/mService/cScheduletoday/index.js
+++ b/pages/mService/cScheduletoday/index.js
@@ -8,7 +8,7 @@
 
   data: {
     icon_calendar: $f.baseIconUrl + 'res/calendar.jpg',
-    shcedules: [],
+    schedules: [],
     expand: false,
     unfinishedCount: 0,
   },
diff --git a/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.wxml b/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.wxml
index a2ebfe2..aea7d3f 100644
--- a/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.wxml
+++ b/pages/mUser/baseC/cCompanyInfo/cCompanyInfo.wxml
@@ -14,9 +14,9 @@
       <input-cell id="{{item.id}}" wx:for="{{msg}}" wx:key="index" item="{{item}}" bindpassValue="changeMsg"></input-cell>
     </mp-cells>
   </view>
-  <view class="weui-upload-view">
+  <!-- <view class="weui-upload-view">
     <mp-upload title="涓婁紶钀ヤ笟鎵х収" titleClass="upload-title-class" max-count="1" files="{{imgFiles}}" binduploadImg="uploadFile" binddelete="delImg"></mp-upload>
-  </view>
+  </view> -->
 </view>
 <view class="page__ft">
   <view class="submit" bindtap="onSubmit">{{submitText}}</view>
diff --git a/pages/mUser/mine/mine.js b/pages/mUser/mine/mine.js
index 28d9a96..1976431 100644
--- a/pages/mUser/mine/mine.js
+++ b/pages/mUser/mine/mine.js
@@ -120,6 +120,10 @@
         //瀹堟硶鎵胯
         url = '/pages/mPromise/promisehome/promise';
         break;
+      case '9':
+        //闂鏁存敼
+        url = '/pages/mExtra/pSupervisionSummary/index';
+        break;
     }
     if (url != '') {
       wx.navigateTo({
diff --git a/pages/mUser/mine/mine.wxml b/pages/mUser/mine/mine.wxml
index 0971741..f2ca52b 100644
--- a/pages/mUser/mine/mine.wxml
+++ b/pages/mUser/mine/mine.wxml
@@ -40,6 +40,13 @@
       </view>
     </view>
     <view class="fyui-panel">
+      <view class="fyui-cell fyui-cell_select title" bindtap="goto" data-index="9">
+        <view class="fyui-cell__hd">
+          <image src="/res/icons/cq_illegal.png" class="icon" />
+        </view>
+        <view class="fyui-cell__bd">闂鏁存敼</view>
+        <view class="fyui-cell__ft"></view>
+      </view>
       <view class="fyui-cell fyui-cell_select title" bindtap="goto" data-index="8">
         <view class="fyui-cell__hd">
           <image src="/res/icons/icon9.png" class="icon" />
diff --git a/project.private.config.json b/project.private.config.json
index fad69af..3187788 100644
--- a/project.private.config.json
+++ b/project.private.config.json
@@ -5,5 +5,5 @@
   },
   "description": "椤圭洰绉佹湁閰嶇疆鏂囦欢銆傛鏂囦欢涓殑鍐呭灏嗚鐩� project.config.json 涓殑鐩稿悓瀛楁銆傞」鐩殑鏀瑰姩浼樺厛鍚屾鍒版鏂囦欢涓�傝瑙佹枃妗o細https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
   "projectname": "ep-law-abiding",
-  "libVersion": "2.25.4"
+  "libVersion": "3.3.4"
 }
\ No newline at end of file
diff --git a/res/icons/ic_supervised.png b/res/icons/ic_supervised.png
new file mode 100644
index 0000000..717fe7f
--- /dev/null
+++ b/res/icons/ic_supervised.png
Binary files differ
diff --git a/res/icons/ic_unsupervised.png b/res/icons/ic_unsupervised.png
new file mode 100644
index 0000000..2c56427
--- /dev/null
+++ b/res/icons/ic_unsupervised.png
Binary files differ
diff --git a/service/baserequest.js b/service/baserequest.js
index 77324b1..f56f380 100644
--- a/service/baserequest.js
+++ b/service/baserequest.js
@@ -9,15 +9,19 @@
  */
 const util = require('../utils/util.js');
 
-// const baseUrl = "http://192.168.0.123:8080"
-// const baseUrl = "https://fyami.com.cn:447"
+// 灏忕▼搴忓悗鍙�
+// const baseUrl = "http://192.168.0.138:8082"
 const baseUrl = 'https://fyami.com.cn';
-
 const bu = 'https://fyami.com.cn';
-// const bu = "https://fyami.com.cn:447"
 const basePicUrl = `${bu}/images/`;
 const baseIconUrl = `${bu}/images/weixin/eplaw/`;
 const baseFileUrl = `${bu}/meeting/file/`;
+
+// 椋炵窘鐩戠绯荤粺鍚庡彴
+const spUrl = "https://fyami.com.cn:447"
+const spBu = "https://fyami.com.cn:447"
+const spPicUrl = `${spBu}/images/`;
+
 // const mode = 'debug';
 const mode = 'prod';
 
@@ -98,4 +102,6 @@
   baseUrl: baseUrl,
   baseFileUrl: baseFileUrl,
   baseIconUrl: baseIconUrl,
+  spUrl: spUrl,
+  spPicUrl: spPicUrl,
 };
diff --git a/service/scheduleservice.js b/service/scheduleservice.js
index e5c6413..f120ab8 100644
--- a/service/scheduleservice.js
+++ b/service/scheduleservice.js
@@ -59,5 +59,40 @@
     Object.assign(cb, fun);
 
     $f.post(cb);
+  },
+
+  // 鑾峰彇褰撳墠鐢ㄦ埛鐨勫疄鎿嶄簨鍔�
+  getOperations(fun) {
+    let cb = {
+      url: `/operation/get?userId=${app.globalData.accessToken.userId}`,
+    };
+    Object.assign(cb, fun);
+
+    $f.get(cb);
+  },
+
+  // 鑾峰彇褰撳墠鐢ㄦ埛鐨勫疄鎿嶄簨鍔″拰鎿嶄綔璁板綍
+  getOperationRecords(fun) {
+    let cb = {
+      url: `/operation/get/record?userId=${app.globalData.accessToken.userId}`,
+    };
+    Object.assign(cb, fun);
+
+    $f.get(cb);
+  },
+
+  // 鎵ц瀹炴搷浜嬪姟
+  doOperations({operationId, stateId}, fun) {
+    let cb = {
+      url: `/operation/execute`,
+      params: {
+        userId: app.globalData.accessToken.userId,
+        operationId,
+        stateId
+      },
+    };
+    Object.assign(cb, fun);
+
+    $f.post(cb);
   }
 };
diff --git a/service/taskservice.js b/service/taskservice.js
index 231dc8b..5290f73 100644
--- a/service/taskservice.js
+++ b/service/taskservice.js
@@ -1,10 +1,10 @@
-const Multipart = require('../utils/Multipart.min')
-const $f = require('./baserequest')
-const util = require('../utils/util')
+const Multipart = require('../utils/Multipart.min');
+const $f = require('./baserequest');
+const util = require('../utils/util');
 
-const baseUrl = "https://fyami.com.cn:447"
-// const baseUrl = "http://47.100.191.150:9005"
-const imgUrl = baseUrl + '/images/'
+const baseUrl = $f.spUrl;
+// const baseUrl = 'http://192.168.0.138:8082';
+const imgUrl = $f.spPicUrl;
 
 module.exports = {
   imgUrl,
@@ -13,9 +13,9 @@
   getTopTask: function (fun) {
     let cb = {
       url: `/task/alltask/0`,
-    }
-    Object.assign(cb, fun)
-    $f.get(cb, baseUrl)
+    };
+    Object.assign(cb, fun);
+    $f.get(cb, baseUrl);
   },
 
   //鑾峰彇瀛愪换鍔$粺璁�
@@ -25,19 +25,35 @@
       params: {
         topTaskId: topTaskId,
         sceneTypeId: sceneTypeId,
-      }
-    }
-    Object.assign(cb, fun)
-    $f.get(cb, baseUrl)
+      },
+    };
+    Object.assign(cb, fun);
+    $f.get(cb, baseUrl);
   },
 
   //鑾峰彇瀛愪换鍔¤鎯�
   getSubtask: function (stGuid, fun) {
     let cb = {
       url: `/subtask/${stGuid}`,
+    };
+    Object.assign(cb, fun);
+    $f.get(cb, baseUrl);
+  },
+
+  //鏍规嵁鍦烘櫙id鑾峰彇瀛愪换鍔¤鎯�
+  getSubtaskByScene: function ({ sceneId, startTime, endTime }, fun) {
+    let cb = {
+      url: `/subtask/byScene/`,
+      params: { sceneId: sceneId },
+    };
+    if (startTime) {
+      cb.params.startTime = startTime;
     }
-    Object.assign(cb, fun)
-    $f.get(cb, baseUrl)
+    if (endTime) {
+      cb.params.endTime = endTime;
+    }
+    Object.assign(cb, fun);
+    $f.get(cb, baseUrl);
   },
 
   //鑾峰彇瀛愪换鍔¢棶棰�
@@ -46,32 +62,34 @@
       url: `/problemlist/subtask`,
       params: {
         stGuid: stGuid,
-      }
-    }
-    Object.assign(cb, fun)
-    $f.get(cb, baseUrl)
+      },
+    };
+    Object.assign(cb, fun);
+    $f.get(cb, baseUrl);
   },
 
   //涓婁紶鏁存敼鍥剧墖
   uploadChangePic: function (pId, paths, fun) {
-    const fields = [{
-      name: 'problemId',
-      value: pId
-    }]
-    const files = []
+    const fields = [
+      {
+        name: 'problemId',
+        value: pId,
+      },
+    ];
+    const files = [];
     paths.forEach(p => {
       files.push({
         name: 'images',
-        filePath: p
-      })
+        filePath: p,
+      });
     });
     console.log(files);
     let p = new Multipart({
       fields,
-      files
-    }).submit(baseUrl + `/problemlist/changeProblem`)
+      files,
+    }).submit(baseUrl + `/problemlist/changeProblem`);
     p.then(res => {
-      fun.success(res)
-    })
+      fun.success(res);
+    });
   },
-}
\ No newline at end of file
+};
diff --git a/service/userservice.js b/service/userservice.js
index 0ae6646..5722766 100644
--- a/service/userservice.js
+++ b/service/userservice.js
@@ -112,5 +112,18 @@
     Object.assign(cb, fun)
 
     $f.post(cb)
+  },
+
+  // 鑾峰彇椋炵窘鐩戠绯荤粺涓搴旇处鎴风殑鍦烘櫙淇℃伅
+  getSceneByUserId(userId, fun) {
+    let cb = {
+      url: `/usermap/scene`,
+      params: {
+        tzUserId: userId,
+      }
+    }
+    Object.assign(cb, fun)
+  
+    $f.get(cb, $f.spUrl)
   }
 }
\ No newline at end of file
diff --git a/style/iconfont.wxss b/style/iconfont.wxss
new file mode 100644
index 0000000..23df272
--- /dev/null
+++ b/style/iconfont.wxss
@@ -0,0 +1,306 @@
+@font-face {
+  font-family: 'wr';
+  src: url('https://cdn3.codesign.qq.com/icons/gqxWyZ1yMJZmVXk/Yyg5Zp2LG8292lK/iconfont.woff?t=cfc62dd36011e60805f5c3ad1a20b642')
+    format('woff2');
+}
+
+.wr {
+  font-family: 'wr' !important;
+  font-size: 32rpx;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+.wr-deliver:before {
+  content: '\e033';
+}
+.wr-indent_close:before {
+  content: '\e041';
+}
+.wr-edit:before {
+  content: '\e002';
+}
+.wr-succeed:before {
+  content: '\e00d';
+}
+.wr-goods_return:before {
+  content: '\e03c';
+}
+.wr-wallet:before {
+  content: '\e051';
+}
+.wr-package:before {
+  content: '\e047';
+}
+.wr-comment:before {
+  content: '\e037';
+}
+.wr-exchang:before {
+  content: '\e03e';
+}
+.wr-credit_card:before {
+  content: '\e035';
+}
+.wr-service:before {
+  content: '\e04a';
+}
+.wr-shop_bag:before {
+  content: '\e02a';
+}
+.wr-goods_refund:before {
+  content: '\e03d';
+}
+.wr-check:before {
+  content: '\e053';
+}
+.wr-wechat:before {
+  content: '\e065';
+}
+.wr-cartAdd:before {
+  content: '\e05d';
+}
+.wr-home:before {
+  content: '\e020';
+}
+.wr-person:before {
+  content: '\e02c';
+}
+.wr-cart:before {
+  content: '\e023';
+}
+.wr-location:before {
+  content: '\e016';
+}
+.wr-arrow_forward:before {
+  content: '\e012';
+}
+.wr-close:before {
+  content: '\e021';
+}
+.wr-search:before {
+  content: '\e011';
+}
+.wr-clear_filled:before {
+  content: '\e027';
+}
+.wr-arrow_drop_up:before {
+  content: '\e071';
+}
+.wr-arrow_drop_down:before {
+  content: '\e070';
+}
+.wr-filter:before {
+  content: '\e038';
+}
+.wr-copy:before {
+  content: '\e001';
+}
+.wr-arrow_back:before {
+  content: '\e003';
+}
+.wr-add_circle:before {
+  content: '\e004';
+}
+.wr-Download:before {
+  content: '\e006';
+}
+.wr-map:before {
+  content: '\e007';
+}
+.wr-store:before {
+  content: '\e008';
+}
+.wr-movie:before {
+  content: '\e00a';
+}
+.wr-done:before {
+  content: '\e00b';
+}
+.wr-minus:before {
+  content: '\e00c';
+}
+.wr-list:before {
+  content: '\e00e';
+}
+.wr-expand_less:before {
+  content: '\e00f';
+}
+.wr-person_add:before {
+  content: '\e010';
+}
+.wr-Photo:before {
+  content: '\e013';
+}
+.wr-preview:before {
+  content: '\e014';
+}
+.wr-remind:before {
+  content: '\e015';
+}
+
+.wr-info:before {
+  content: '\e017';
+}
+.wr-expand_less_s:before {
+  content: '\e018';
+}
+.wr-arrow_forward_s:before {
+  content: '\e019';
+}
+.wr-expand_more_s:before {
+  content: '\e01a';
+}
+.wr-share:before {
+  content: '\e01d';
+}
+.wr-notify:before {
+  content: '\e01e';
+}
+.wr-add:before {
+  content: '\e01f';
+}
+.wr-Home:before {
+  content: '\e020';
+}
+.wr-delete:before {
+  content: '\e022';
+}
+.wr-error:before {
+  content: '\e025';
+}
+.wr-sort:before {
+  content: '\e028';
+}
+.wr-sort_filled:before {
+  content: '\e029';
+}
+.wr-shop_bag_filled:before {
+  content: '\e02b';
+}
+
+.wr-person_filled:before {
+  content: '\e02d';
+}
+.wr-cart_filled:before {
+  content: '\e02e';
+}
+.wr-home_filled:before {
+  content: '\e02f';
+}
+.wr-add_outline:before {
+  content: '\e030';
+}
+
+.wr-compass:before {
+  content: '\e034';
+}
+.wr-goods_exchange:before {
+  content: '\e03a';
+}
+.wr-group_buy:before {
+  content: '\e03b';
+}
+.wr-group:before {
+  content: '\e03f';
+}
+.wr-indent_goods:before {
+  content: '\e040';
+}
+.wr-help:before {
+  content: '\e042';
+}
+.wr-group_takeout:before {
+  content: '\e043';
+}
+.wr-label:before {
+  content: '\e044';
+}
+.wr-indent_wating:before {
+  content: '\e045';
+}
+.wr-member:before {
+  content: '\e046';
+}
+
+.wr-scanning:before {
+  content: '\e04b';
+}
+.wr-tv:before {
+  content: '\e04d';
+}
+.wr-to_top:before {
+  content: '\e04f';
+}
+.wr-visibility_off:before {
+  content: '\e050';
+}
+.wr-error-1:before {
+  content: '\e052';
+}
+
+.wr-arrow_right:before {
+  content: '\e054';
+}
+.wr-arrow_left:before {
+  content: '\e056';
+}
+.wr-picture_filled:before {
+  content: '\e057';
+}
+.wr-navigation:before {
+  content: '\e058';
+}
+.wr-telephone:before {
+  content: '\e059';
+}
+.wr-indent_time:before {
+  content: '\e05c';
+}
+.wr-cart_add:before {
+  content: '\e05d';
+}
+.wr-classify:before {
+  content: '\e060';
+}
+.wr-place:before {
+  content: '\e063';
+}
+.wr-wechat_pay:before {
+  content: '\e064';
+}
+.wr-security:before {
+  content: '\e066';
+}
+.wr-alarm:before {
+  content: '\e067';
+}
+.wr-person-1:before {
+  content: '\e068';
+}
+.wr-open_in_new:before {
+  content: '\e069';
+}
+.wr-uncheck:before {
+  content: '\e06b';
+}
+.wr-thumb_up:before {
+  content: '\e06c';
+}
+.wr-thumb_up_filled:before {
+  content: '\e06d';
+}
+.wr-star:before {
+  content: '\e06e';
+}
+.wr-star_filled:before {
+  content: '\e06f';
+}
+.wr-cards:before {
+  content: '\e072';
+}
+.wr-picture_error_filled:before {
+  content: '\e076';
+}
+.wr-discount:before {
+  content: '\e077';
+}

--
Gitblit v1.9.3